“String”类型的值没有成员索引

时间:2016-10-06 08:23:56

标签: swift xcode string swift3

我正在尝试将我的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
                            }
                        }

4 个答案:

答案 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)

indicesCollection类型的属性。自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)
}

这应该可以解决问题