在Swift中使用stringByReplacingCharactersInRange

前端之家收集整理的这篇文章主要介绍了在Swift中使用stringByReplacingCharactersInRange前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在Swift / Xcode6中使用UITextFieldDelegate,我正在努力使用我应该使用stringByReplacingCharactersInRange的方式.编译器错误是’无法将表达式的类型’String’转换为类型’$T8′.
func textField(textField: UITextField!,shouldChangeCharactersInRange range: NSRange,replacementString string: String!) -> Bool
{
    let s = textField.text.stringByReplacingCharactersInRange(range:range,withString:string)
    if countElements(s) > 0 {

    } else {

    }
    return true
}

更新Xcode 6 Beta 5:事情是shouldChangeCharactersInRange给出一个NSRange对象,我们需要一个Swift Range对象为stringByReplacingCharactersInRange.这可能还是一个bug,因为我不明白为什么我们还应该处理NS *对象?代表方法的String参数是Swift类型.

以下是各种Swift版本中计算结果字符串的方法.

请注意,所有方法都以完全相同的方式使用 – [NSString stringByReplacingOccurrencesOfString:withString:],语法不同.

这是计算结果字符串的首选方法.转换为Swift范围并在Swift字符串上使用它是容易出错的.例如,Johan的答案在使用非ASCII字符串时以几种方式是不正确的.

Swift 3:

func textField(_ textField: UITextField,shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool {
    let result = (textField.text as NSString?)?.replacingCharacters(in: range,with: string) ?? string
    // ... do something with `result`
}

Swift 2.1:

func textField(textField: UITextField,replacementString string: String) -> Bool {
    let result = (textField.text as NSString?)?.stringByReplacingCharactersInRange(range,withString: string)
    // ... do something with `result`
}

Swift 1(仅供参考):

let result = textField.text.bridgeToObjectiveC().stringByReplacingCharactersInRange(range,withString:string)

猜你在找的Swift相关文章