LoginSignup
7
7

More than 5 years have passed since last update.

Swift で stringByReplacingCharactersInRange がコンパイルエラーになる件

Posted at

環境

  • Xcode 6.1

起きたことと解決策

UITextFieldDelegatetextField(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)

こんな感じで。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7