Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String subscripting error

Tags:

swift

swift4

I just converted to Swift 4 and am now getting the following error: Cannot subscript a value of type 'String.UnicodeScalarView' with an index of type 'CountableRange' (aka 'CountableRange')

The lines of code are:

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)
  }
}

How can I correct it?

like image 667
Floyd Resler Avatar asked Jun 11 '26 15:06

Floyd Resler


1 Answers

You are using a CountableRange<Int> but to access to the characters of a String you must use CountableRange<String.Index>:

let range = cleaned.startIndex..<min(cleaned.index(cleaned.startIndex, offsetBy: 10), cleaned.endIndex)

That's because in Swift, String type has an index type of String.Index and not of Int.

like image 186
Pop Flamingo Avatar answered Jun 14 '26 18:06

Pop Flamingo