0

我在两个字符集之间创建了一个联合,以便能够将句点与 decimalDigits 字符集一起使用。

 func textField(_ textField: UITextField, shouldChangeCharactersIn     range: NSRange, replacementString string: String) -> Bool {

            let allowed = CharacterSet.decimalDigits
            let period = CharacterSet.init(charactersIn: ".")
            let both = CFCharacterSetUnion(allowed as! CFMutableCharacterSet, period as CFCharacterSet)

            let characterSet = NSCharacterSet(charactersIn: string)

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

但是,返回“both.isSuperset(of: characterSet as CharacterSet)”。如何纠正?

更新 1:当前建议的答案显示的错误 在此处输入图像描述

更新2:最新更新 在此处输入图像描述

4

1 回答 1

3

尝试这样做:

func textField(_ textField: UITextField, shouldChangeCharactersIn     range: NSRange, replacementString string: String) -> Bool {

    var allowed = CharacterSet.decimalDigits
    let period = CharacterSet.init(charactersIn: ".")
    allowed.formUnion(period)

    //UNCOMMENT when isSuperset is working
    //let characterSet = CharacterSet(charactersIn: string)
    //return allowed.isSuperset(of: characterSet)

    // Swift 3 appropriate solution 
    let isSuperset = string.rangeOfCharacter(from: allowed.inverted) == nil
    return isSuperset
}

我在这里找到的基础。

更好的是,使“ allowed”(或“ both”,无论您决定如何命名)成为在其中创建的属性,viewDidLoad这样您就不会在每次键入字符时重新创建和合并字符集。

于 2017-06-24T00:03:19.453 回答