创建自己的字符集会导致崩溃

时间:2017-06-23 18:48:11

标签: swift character decimal nscharacterset

我使用这段代码来限制用户对键盘的输入。

 func textField(_ textField: UITextField, shouldChangeCharactersIn     range: NSRange, replacementString string: String) -> Bool {
    let allowedCharacters = CharacterSet.init(charactersIn: ".0123456789")
    let characterSet = NSCharacterSet(charactersIn: string)

    return allowedCharacters.isSuperset(of: characterSet as CharacterSet)
}

但是当我输入任何字符时我的程序崩溃了。 enter image description here

更新2: 因此99.9%的此解决方案效果很好,不幸的是,周期/小数点没有注册。不确定为什么会这样?

1 个答案:

答案 0 :(得分:0)

这似乎是Swift中的一个错误,Swift问题跟踪器上存在多个问题:https://bugs.swift.org/browse/SR-3311https://bugs.swift.org/browse/SR-3667

在修复此问题之前,您可以使用以下扩展名来解决此问题:

extension CharacterSet {

    func isSupersetOf(other: CharacterSet) -> Bool {
        return CFCharacterSetIsSupersetOfSet(self as CFCharacterSet, (other as NSCharacterSet).copy() as! CFCharacterSet)
    }
}

请注意,您需要将characterSet变量从NSCharacterSet类型更改为CharacterSet才能在示例中使用该扩展程序。