Swift String Range で範囲内文字列を取得
Overview
Swift で範囲内の文字列を取得、切り出しを行うのは一苦労になりました。
Objective-C だったら簡単だったがSwiftでは一苦労になり、苦戦しております。
なので簡単にやるにはどのよういやったら良いかを考えてみた。
Apple 公式のAPIの使い方
let name = "Marie Curie"
let firstSpace = name.firstIndex(of: " ") ?? name.endIndex
let firstName = name[..<firstSpace]
このような感じになっている、伝えたいことはわかるが、Stringを配列的な感じで使えるのがいい感じである、
C言語のcharと同じ感覚である、さらにそれをRangeにして範囲を取得できるようになっているのはいいが、
このコードはコンパイルできない、
(☝︎ ՞ਊ ՞)☝︎
がStringの肩を配列のような添字で取得できる、
上記の方法ではなく、下記のようにすると取得できる、。
let moji = "1234567890"
// 一番最初から、二文字目まで取得できます。
let str = moji[moji.startIndex..<moji.index(moji.startIndex, offsetBy: 2)]
print (str)
これで取得できる
Rangeで指定できるが、String.Indexにしないと範囲指定はできない、
ここが大変であるので、Appleさん、 RangeのInt型で指定できると尚良いと考える
これは面倒なので、Stringを拡張した関数を実装してみる
下記になる、
extension String {
func substring (range: Range<Int>) -> String {
return String(self[self.index(self.startIndex, offsetBy: range.lowerBound)..<self.index(self.startIndex, offsetBy: range.upperBound)])
}
}
使い方は下記になる。
let moji = "1234567890"
print (moji.substring(range: 0..<5))
print (moji.substring(range: 1..<4))
Rangeで範囲を指定して取得することができる