Swift 4: 'subscript' 不可用错误
Swift 4: 'subscript' is unavailable error
我正在使用尚未完全更新到 Swift 4 的 MapBox 导航框架。我有一个 'subscript' 错误,我无法完全解决。这是代码。我真的很感激任何帮助。谢谢。
private func extractNextChunk(_ encodedString: inout String.UnicodeScalarView) throws -> String {
var currentIndex = encodedString.startIndex
while currentIndex != encodedString.endIndex {
let currentCharacterValue = Int32(encodedString[currentIndex].value)
if isSeparator(currentCharacterValue) {
let extractedScalars = encodedString[encodedString.startIndex...currentIndex]
encodedString = encodedString[encodedString.index(after: currentIndex)..<encodedString.endIndex]
return String(extractedScalars)
}
currentIndex = encodedString.index(after: currentIndex)
}
throw PolylineError.chunkExtractingError
}
错误消息具有误导性。真正的问题是订阅
a String.UnicodeScalarView
的范围 returns a String.UnicodeScalarView.SubSequence
,因此您不能将其分配回
encodedString
.
一个解决方案是创建一个 String.UnicodeScalarView
来自子序列:
encodedString = String.UnicodeScalarView(encodedString[encodedString.index(after: currentIndex)...])
或者(也许更简单)反过来
改为删除 encodedString
的初始部分:
encodedString.removeSubrange(...currentIndex)
无论哪种情况,您都可以使用"one-sided ranges",比较
SE-0172
我正在使用尚未完全更新到 Swift 4 的 MapBox 导航框架。我有一个 'subscript' 错误,我无法完全解决。这是代码。我真的很感激任何帮助。谢谢。
private func extractNextChunk(_ encodedString: inout String.UnicodeScalarView) throws -> String {
var currentIndex = encodedString.startIndex
while currentIndex != encodedString.endIndex {
let currentCharacterValue = Int32(encodedString[currentIndex].value)
if isSeparator(currentCharacterValue) {
let extractedScalars = encodedString[encodedString.startIndex...currentIndex]
encodedString = encodedString[encodedString.index(after: currentIndex)..<encodedString.endIndex]
return String(extractedScalars)
}
currentIndex = encodedString.index(after: currentIndex)
}
throw PolylineError.chunkExtractingError
}
错误消息具有误导性。真正的问题是订阅
a String.UnicodeScalarView
的范围 returns a String.UnicodeScalarView.SubSequence
,因此您不能将其分配回
encodedString
.
一个解决方案是创建一个 String.UnicodeScalarView
来自子序列:
encodedString = String.UnicodeScalarView(encodedString[encodedString.index(after: currentIndex)...])
或者(也许更简单)反过来
改为删除 encodedString
的初始部分:
encodedString.removeSubrange(...currentIndex)
无论哪种情况,您都可以使用"one-sided ranges",比较 SE-0172