Swift でちょっと苦労したのでメモ。
UITextFieldDelegate で返される NSRange を String の操作に使おうとしたら、そのままでは使えませんでした。調べてみると String の操作メソッドでは Range<String.Index> が使わていました。文字の位置を表す型として int や NSInteger ではなく、String.Index という専用の型が設けられたようです。
int から String.Index には直接変換できないので、advance関数を利用します。苦労の末に以下の方法で NSRange から Range<String.Index> への変換が出来ました。
func rangeWith(range: NSRange) -> Range<String.Index> { var string = "dummy" var startIndex = advance(string.startIndex, range.location) var endIndex = advance(startIndex, range.length) return Range(start: startIndex, end: endIndex) }
ダミーのString使ったりするのはイマイチなので、なんか良い方法はないかなー