環境
- Xcode 6.1
起きたことと解決策
UITextFieldDelegate
の textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String)
で、これまで Objective-C で当たり前のように記述していたコードが Swift ではコンパイルエラーになりました。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let replacedText = textField.text.stringByReplacingCharactersInRange(range, withString: string) // 'NSRange' is not convertible to 'Range<String.Index>'
// ...
return true
}
以下のように一度 NSString
にキャストした文字列に対して stringByReplacingCharactersInRange
を実行すれば大丈夫でした。
let text = textField.text as NSString
let replacedText = text.stringByReplacingCharactersInRange(range, withString: string)
一行で書きたかったら
let replacedText = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)
こんな感じで。