Swiftで文字列を切り出す方法はいくつか方法があります。
ここでは、例として5文字目まで切り出す場合を考えます。
(Swift 5.2で検証しています)
## Rangeを使う
```objc
`gutter:true;
let str = "abcdefg"
// Rangeで切り出す場合
let ranged = str[str.startIndex..<str.index(str.startIndex, offsetBy: 5)]
print("\(ranged), \(type(of: ranged))") // abcde, Substring
// Rangeで切り出す場合簡略版
// 先頭からは..で始めることができる
let ranged2 = str[..<str.index(str.startIndex, offsetBy: 5)]
print("\(ranged2), \(type(of: ranged2))") // abcde, Substring
```
真っ先に思いつくのはRangeで切り出す場合です。
Swiftは文字を切り出す場合のRangeの書き方がややこしいためゴチャゴチャして見えます。
## prefixやdropLastなどのメソッドを使う
```objc
`gutter:true;
let str = "abcdefg"
// prefixで取得する場合
let prefix = str.prefix(5)
print("\(prefix), \(type(of: prefix))") // abcde, Substring
// 文字列の後ろの余計な部分を削る場合
let trimed = str.dropLast(str.count - 5)
print("\(trimed), \(type(of: trimed))") // abcde, Substring
```
切り出す位置や長さが決まっている場合は、prefixやdropLastなどを使って切り出した方がコードはすっきりしそうです。
どの場合も注意が必要なのは、切り出した文字列はSubstring型になる点です。
最終的にStringが欲しい場合はString(xxx)の形でString型に戻す必要があります。
0 件のコメント :
コメントを投稿