インデックスを使った文字列操作
解説する機能
- 文字列のインデックス
-
startIndex
プロパティ -
lastIndex
プロパティ -
index(:offsetBy:)
メソッド
解説
Swiftにおいて、文字列リテラルに「添え字で整数を指定する」ことは不正です。
したがって、"swift"
の3文字目i
を取得するために、「整数の2
」は指定できません。
"swift"[2] // error
// cannot subscript String with an Int, use a String.Index instead.
このようなコードに対して、コンパイラは「整数ではなく、文字列のインデックスを指定すべきだ」と警告します。
最初と最後のインデックス
文字列のインデックスは、「String
型の内部」で定義されたIndex
型の値です。
配列のインデックスと同様に、文字列のインデックスもゼロから数えます。
コード上では、インデックスは整数のように見えますが、実際は互いに互換性のない値です。
先頭や最後尾のインデックスは、文字列のプロパティから取得できます。
let start = "swift".startIndex // 0
let last = "swift".lastIndex // 4
途中のインデックス
途中のインデックスは、index(:offsetBy:)
メソッドで取得できます。
index(:offsetBy:)
メソッドには「起点の位置」と「オフセット量」を指定します。
途中のインデックスを言い換えると、「先頭から任意の量だけオフセットした位置」です。
次のコードは、"swift"
という文字列の「先頭から2
だけオフセットした位置」のインデックスを取得します。
let offsetByTwo = "swift".index(start, offsetBy: 2) // 2
取得したoffsetByTwo
定数は2
ですが、この値は整数ではなくインデックスです。
したがって、文字列の添え字に指定できます。
"swift"[offsetByTwo] // i
"swift"
という文字列の「インデックス2
の位置にある文字」は"i"
です。
実のところ、データ上は文字列を「一連の文字が並んだコレクション」とみなすことができます。