How to convert “Index” to type “Int” in Swift?

前端 未结 6 1959
旧巷少年郎
旧巷少年郎 2020-12-01 10:19

I want to convert the index of a letter contained within a string to an integer value. Attempted to read the header files but I cannot find the type for Index,

6条回答
  •  Happy的楠姐
    2020-12-01 10:39

    edit/update:

    Xcode 11 • Swift 5.1 or later

    extension StringProtocol {
        func distance(of element: Element) -> Int? { firstIndex(of: element)?.distance(in: self) }
        func distance(of string: S) -> Int? { range(of: string)?.lowerBound.distance(in: self) }
    }
    

    extension Collection {
        func distance(to index: Index) -> Int { distance(from: startIndex, to: index) }
    }
    

    extension String.Index {
        func distance(in string: S) -> Int { string.distance(to: self) }
    }
    

    Playground testing

    let letters = "abcdefg"
    
    let char: Character = "c"
    if let distance = letters.distance(of: char) {
        print("character \(char) was found at position #\(distance)")   // "character c was found at position #2\n"
    } else {
        print("character \(char) was not found")
    }
    

    let string = "cde"
    if let distance = letters.distance(of: string) {
        print("string \(string) was found at position #\(distance)")   // "string cde was found at position #2\n"
    } else {
        print("string \(string) was not found")
    }
    

提交回复
热议问题