繁体   English   中英

删除bridgeToObjective-C意味着我不能使用NSRange

[英]removal of bridgeToObjective-C means I can't use NSRange

我有一个viewController ,可以在其中输入一些文本到textField然后点击完成button将其保存。 我只希望完成的按钮在textField中有文本时可见。 为了做到这一点,我为UITexfield使用了委托方法,该方法在将要编辑的时候触发,如下所示。 当它传入NSRange ,我不能将其放入stringByReplacingCharactersInRange因为swift仅允许使用Range。 因此,我NSRange了桥梁,这使我可以使用给定的NSRange 如果您知道将NSRange为Range的方法,或者甚至更好,如果您知道检查文本字段是否为空的更简洁明了的方法,请告诉我。 非常感谢。

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
    let newString = textField.text.bridgeToObjectiveC().stringByReplacingCharactersInRange(range, withString: string)

    if (newString == "" ) {
        self.doneButton.enabled = false
    } else {
        self.doneButton.enabled = true
    }
    return true
}

这是一个函数,它将采用NSRange并替换String的一部分:

func replaceRange(nsRange:NSRange, #ofString:String, #withString:String) ->String {
    let start  = nsRange.location
    let length = nsRange.length
    let endLocation = start + length
    let ofStringLength = countElements(ofString)
    if start < 0 || endLocation < start || endLocation > ofStringLength {
        return ofString
    }
    var startIndex = advance(ofString.startIndex, start)
    var endIndex = advance(startIndex, length)
    var range = Range(start:startIndex, end:endIndex)
    var final = ofString.stringByReplacingCharactersInRange(range, withString:withString)
    return final
}
var original = "🇪🇸😂This is a test"
var replacement = "!"
var nsRange:NSRange = NSMakeRange(1, 2)
var newString = replaceRange(nsRange, ofString:original, withString:replacement)
println("newString:\(newString)")

输出:

newString:🇪🇸!his is a test

无需使用bridgeToObjectiveC()只需将字符串转换为NSString

let newString = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)

这是我喜欢使用的东西:

if ([textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length > 0)
{
    // do something with the text that is there ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM