Swift 3.0 の String
にはこんなメソッドが定義されています:
range(of searchString: String, options: String.CompareOptions, range: Range<String.Index>?, locale: Locale?)
このメソッドを使って、options
のところに .regularExpression
を使えば、searchString
で正規表現を利用した文字列(例えば "Qi+ta"
とか)が使えます。便利。
ところがこのメソッドについて公式の資料がなく、一番近い資料なら一応 range(of:options:)
と range(of:options:range:)
、もしくは localizedStandardRange(of:)
の資料ならありますが、どれも戻り値が NSRange
となっています。
しかし実際このメソッド書いてみると分かりますが、戻り値は Range<String.Index>
と、Swift Foundation で定義された型となっております。String
が実際文字管理に使っているインデックスなので NSString
とか NSRange
が介在せず文字を扱うライブラリの違いによるインデックスの相違もきにする必要がなくなる。
ただ問題は前述の通り、公式資料にはこのメソッドが載っておらず、また Xcode からでも該当メソッドの定義にはジャンプできない。自分ではまだ試してないがもしかするとこれはプライベート API の可能性もありますので、その場合は App Store に配布するアプリにはこのメソッドが使えないのでご注意を。(公式資料がまだ更新されてないってだけならいいんだけどな…)
==========================追記==========================
@woxtu さんのおかげで公式資料発見しました。これで安心して使えますw