我正在尝试将我的Swift 2.2代码迁移到Swift 3(beta),并且在迁移到Swift 3.0后,我在下面的代码中收到以下错误,“类型'String'的值没有成员索引”
如果routePathComponent
是一个字符串,则需要以下帮助。
迁移后
if routePathComponent.hasPrefix(":") {
let variableKey = routePathComponent.substring(with: routePathComponent.indices.suffix(from: routePathComponent.characters.index(routePathComponent.startIndex, offsetBy: 1)))
}
迁移前
if routePathComponent.hasPrefix(":") {
let variableKey = routePathComponent.substringWithRange(routePathComponent.startIndex.advancedBy(1)..<routePathComponent.endIndex)
let variableValue = component.URLDecodedString()
if variableKey.characters.count > 0 && variableValue.characters.count > 0 {
variables[variableKey] = variableValue
}
}
答案 0 :(得分:1)
如果你想省略第一个字符,如果它是冒号,那就是Swift 3方式
if routePathComponent.hasPrefix(":") {
let variableKey = routePathComponent.substring(from: routePathComponent.index(after :routePathComponent.startIndex))
}
与评论中的其他示例相同的是
if let endingQuoteRange = clazz.range(of:"\"") {
clazz.removeSubrange(endingQuoteRange.upperBound..<clazz.endIndex)
...
}
答案 1 :(得分:1)
如果您只想从String中删除第一个字符,则可以使用dropFirst()
。
if routePathComponent.hasPrefix(":") {
let variableKey = String(routePathComponent.characters.dropFirst())
}
答案 2 :(得分:0)
indices
是Collection
类型的属性。自v.2.3起,String
不是Collection
。
使用.characters
属性,该属性返回Collection
的{{1}}个字符。
答案 3 :(得分:0)
var routePathComponent = ":Hello playground"
if routePathComponent.hasPrefix(":") {
let variableKey = routePathComponent.substringFromIndex(routePathComponent.startIndex.advancedBy(1))
//print(variableKey)
}
这应该可以解决问题