字符串下标错误

Flo*_*ler 3 swift swift4

我刚刚转换为Swift 4并且现在出现以下错误:无法使用类型为"CountableRange"(又名为"CountableRange")的索引下标"String.UnicodeScalarView"类型的值

代码行是:

extension AppInvite.PromoCode {
    fileprivate static func truncate(string: String) -> String {
    let validCharacters = CharacterSet.alphanumerics
    let cleaned = string.unicodeScalars.filter {
        validCharacters.contains(UnicodeScalar(UInt16($0.value))!)
    }

    let range = 0 ..< min(10, cleaned.count)
    let characters = cleaned[range].map(Character.init)
    return String(characters)
  }
}
Run Code Online (Sandbox Code Playgroud)

我该如何纠正?

Tre*_*vör 5

您正在使用CountableRange<Int>但要访问必须使用的String字符CountableRange<String.Index>:

let range = cleaned.startIndex..<min(cleaned.index(cleaned.startIndex, offsetBy: 10), cleaned.endIndex)
Run Code Online (Sandbox Code Playgroud)

那是因为在Swift中,Stringtype的索引类型是String.Index而不是Int.