1. ホーム
  2. string

[解決済み] Swiftで "Index "を "Int "型に変換するには?

2022-08-31 21:47:42

質問

文字列に含まれる文字のインデックスを整数値に変換したい。ヘッダファイルを読んでみましたが、以下の型が見つかりません。 Index の型が見つからず、プロトコルに準拠しているように見えますが ForwardIndexType というメソッドを持つ(例えば distanceTo ).

var letters = "abcdefg"
let index = letters.characters.indexOf("c")!

// ERROR: Cannot invoke initializer for type 'Int' with an argument list of type '(String.CharacterView.Index)'
let intValue = Int(index)  // I want the integer value of the index (e.g. 2)

どんな助けでも感謝します。

どのように解決するのですか?

を編集・更新してください。

Xcode 11 - Swift 5.1 またはそれ以降

extension StringProtocol {
    func distance(of element: Element) -> Int? { firstIndex(of: element)?.distance(in: self) }
    func distance<S: StringProtocol>(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<S: StringProtocol>(in string: S) -> Int { string.distance(to: self) }
}


プレイグランドテスト

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