String 如何在UITextFieldDelegate方法中计算目标字符串?
问题 在UITextFieldDelegate的String 如何在UITextFieldDelegate方法中计算目标字符串?,string,swift,range,String,Swift,Range,问题 在UITextFieldDelegate的textField:shouldChangeCharactersRange:replacementString中,我们得到了tf.text中的原始文本、替换字符串和范围 这是计算目标字符串的足够信息(如果我们不截取,TextField将包含什么),但我在编译代码时遇到了问题: func textField( tf: UITextField, shouldChangeCharactersInRange range: NSRange, re
textField:shouldChangeCharactersRange:replacementString
中,我们得到了tf.text
中的原始文本、替换字符串和范围
这是计算目标字符串的足够信息(如果我们不截取,TextField将包含什么),但我在编译代码时遇到了问题:
func textField(
tf: UITextField,
shouldChangeCharactersInRange range: NSRange,
replacementString str: String
) -> Bool
{
var tgt = String( tf.text )
tgt.replaceRange( range.toRange(), with: str ) // PROBLEM HERE
NSLog( "realtime: %@", tgt )
return true
}
我似乎遇到的问题是,String的replaceRange:with:
接受一个字符,而不是字符串
也许有更好或更简单的方法来计算tgt?如果使用
NSString
s方法,您可以这样做。将方法的第一行更改为声明NSMutableString
而不是字符串
:
func textField(tf: UITextField, shouldChangeCharactersInRange range: NSRange,
replacementString str: String) -> Bool {
var tgt = NSMutableString()
tgt.appendString( tf.text )
tgt.replaceCharactersInRange( range, withString: str )
NSLog( "realtime: %@", tgt )
return true
}
(问题源于
NSRange
和内置的SwiftRange
实例与字符串不兼容。)这看起来很有希望-xcode在更新tgt的实例化(NSString不是NSMutableString的子类型)时给了我一个问题-这可能有些过分了