String 如何在UITextFieldDelegate方法中计算目标字符串?

String 如何在UITextFieldDelegate方法中计算目标字符串?,string,swift,range,String,Swift,Range,问题 在UITextFieldDelegate的textField:shouldChangeCharactersRange:replacementString中,我们得到了tf.text中的原始文本、替换字符串和范围 这是计算目标字符串的足够信息(如果我们不截取,TextField将包含什么),但我在编译代码时遇到了问题: func textField( tf: UITextField, shouldChangeCharactersInRange range: NSRange, re

问题

在UITextFieldDelegate的
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
和内置的Swift
Range
实例与字符串不兼容。)

这看起来很有希望-xcode在更新tgt的实例化(NSString不是NSMutableString的子类型)时给了我一个问题-这可能有些过分了