背景
Swift4になって文字列の操作がかなり簡単になりましたが、いまだに文字列を一定の文字数ごとに分割した配列として取得するメソッドが用意されていません。
そこで、String
のextension
を作ってみたので記しておきます。
ソースコード
import Foundation
extension String {
func splitInto(_ length: Int) -> [String] {
var str = self
for i in 0 ..< (str.count - 1) / max(length, 1) {
str.insert(",", at: str.index(str.startIndex, offsetBy: (i + 1) * max(length, 1) + i))
}
return str.components(separatedBy: ",")
}
}
用例
let str = "abcdefghijklmnopqrstuvwxyz"
let array = str.splitInto(3)
print(array)
// >> ["abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yz"]
余談
いくつか同様のことを実装している文献を見つけましたが、提案手法はその中でもかなり短くまとまっていると思います。
また、SubString
やCharacter
の配列で取得するよりもString
の配列で取得できた方が使い勝手が良いと思うのでアレンジしてみました。