なんか、もっと良い方法があると思うんだけど、思いつかないので力技で実装です。
String+Splitter.swift
extension String {
/** 文字列を固定長で分割する
- Parameter len: 分割する長さ
- Parameter handle: 分割ごとに呼び出される
*/
public func Splitter(len: Int, handle: ((cut: String,isLast: Bool)->Void)) -> Void
{
var idx = self.startIndex.advancedBy(len)
var sub = self.substringToIndex(idx)
var other = self.substringFromIndex(idx)
var dist = other.startIndex.distanceTo(other.endIndex)
while ( dist>len ) {
handle(cut: sub,isLast: false)
idx = other.startIndex.advancedBy(len)
sub = other.substringToIndex(idx)
other = other.substringFromIndex(idx)
dist = other.startIndex.distanceTo(other.endIndex)
}
handle(cut: sub,isLast: false)
handle(cut: other,isLast: true)
}
}
let testString : String = "Hello world"
testString.Splitter(3 , handle: {
(cut: String,flg: Bool) -> Void in
LOG("Splitter test \(cut), \(flg)")
})
let testString2 : String = "ハロー 世界よ!"
testString2.Splitter(3 , handle: {
(cut: String,flg: Bool) -> Void in
LOG("Splitter test2 \(cut), \(flg)")
})
Splitter test Hel, false
Splitter test lo , false
Splitter test wor, false
Splitter test ld, true
Splitter test2 ハロー, false
Splitter test2 世界, false
Splitter test2 よ!, true