Swiftに触れる中で、文字列操作が他言語と比べて分かりづらいところが多かったので備忘録としてまとめておく。

今回は特定の文字列から、先頭および末尾の1文字を取得する方法を紹介する。

ストリングインデックスについて

Swiftで文字の切り出しをおこなう場合、indexという概念を理解しておく必要がある。

let str = "Swift入門"

例えば上記の文字列から特定の文字を取得する場合、真っ先に思い浮かぶのが以下のようなインデックス番号の指定だ。

// 先頭の1文字を取得しようとするが、これだとエラーが発生する
print(str[0])

考え方としては正しいが、整数でインデックスを指定しようとするとエラーが発生する。

Swiftではストリングインデックスという概念があり、指定位置の文字を取得する場合、以下のようにしなければならない。

print(str[index])

上記のindexは要素の位置や範囲を表す特殊な値で、文字列の先頭・末尾のインデックスは次のようにして取得することができる。

let start = str.startIndex
let end = str.endIndex

文字列の先頭文字を取得する

先ほど取得したインデックスを用いて、以下のように文字列の先頭1文字を取得することができる。

let str = "Swift入門"
let start = str.startIndex

print(str[start])
// S

ここで出力される「S」はCharacter型となるため、String型と合わせて扱う際は注意が必要だ。

先頭からn文字目の1文字を取得する

次に、インデックスの位置を変えて先頭からn文字目の文字を取得する方法を紹介する。

例えば先頭から2文字目を取得する場合は、index関数を使いインデックスを一つ進めれば良い。

let str = "Swift入門"
var index = str.startIndex

// インデックスを1つ進める
index = str.index(after: index)

print(str[index])
// w

文字列の末尾の文字を取得する

末尾の文字を取得する場合は少し注意が必要だ。

let str = "Swift入門"
let end = str.endIndex

print(str[end])
// エラー発生!

endIndexが示すのは、末尾の文字の「次の位置」なので上記のコードではエラーが発生する。

したがってインデックスを一つ手前に戻すことで、末尾の1文字を取得することができる。

let str = "Swift入門"
var index = str.endIndex

// インデックスを1つ戻す
index = str.index(before: index)

print(str[end])
// 門