文字列から任意の文字列を取得したい場合、以下のようなコードはシンタックスエラーとなります。
sample1.swift
let str = "world"
println(str.substringFromIndex(2)) // rld を期待
Intを直接指定することはできず、String.Indexを指定する必要があります。
String.Indexはadvance関数を使って作成します。
sample2.swift
let str = "world"
println(str.substringFromIndex(advance(str.startIndex, 2))) // rld
NSString型として取得することもできます。
sample3.swift
let str = "world"
println(NSString(string: str).substringFromIndex(2)) // rld
機能拡張(extension)として実装すると次のようになります。
substring1とsubstring2はともに同じ実行結果となります。
sample4.swift
extension String {
func substring1(start: Int) -> String {
return self.substringFromIndex(advance(self.startIndex, start))
}
func substring2(start: Int) -> String {
return NSString(string: self).substringFromIndex(start)
}
}
let str = "world"
println(str.substring1(2)) // rld
println(str.substring2(2)) // rld
文字列のstartで指定された位置からlength分の文字列を返す場合は次のようになります。
sample5.swift
extension String {
func substring(start: Int) -> String {
return self.substringFromIndex(advance(self.startIndex, start))
}
func substring(start: Int, length:Int) -> String {
return self.substringFromIndex(advance(self.startIndex, start)).substringToIndex(advance(self.startIndex, length))
}
}
let str = "world"
println(str.substring(2, length:2)) // rl
println("おはようせかい".substring(1, length: 3)) // はよう