下のように文字を一定の長さで区切って配列にする方法を調べてみました。
"あいうえお" → ["あい", "うえ", "お"]
標準のメソッドは用意されてないようなので、下のように独自のメソッドを追加しました。
extension String { func split(length: Int) -> [String] { var texts: [String] = [] var start = self.startIndex while start < self.endIndex { let end = self.index(start, offsetBy: length, limitedBy: self.endIndex) ?? self.endIndex texts.append(String(self[start..<end])) start = end } return texts } }
使い方は下の通りです。
"あいうえお".split(length: 2) // → ["あい", "うえ", "お"] "あいうえお".split(length: 1) // → ["あ", "い", "う", "え", "お"]
メソッドでは下の書き方で文字列の一部を取り出しています。
startとendはString.Index
型になります。
self[start..<end]
endは下の書き方で作っています。
limitedByはlengthが大きすぎる時にFatal error: String index is out of bounds
エラーが発生するので付けています。
let end = self.index(start, offsetBy: length, limitedBy: self.endIndex) ?? self.endIndex