【问题标题】:Value of tuple Void (aka ()) has no member "isSuperset"元组 Void (aka ()) 的值没有成员“isSuperset”
【发布时间】:2017-06-23 23:48:24
【问题描述】:

我在两个字符集之间创建了一个联合,以便能够将句点与 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: 最近更新

【问题讨论】:

    标签: swift textfield nscharacterset


    【解决方案1】:

    尝试这样做:

    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
    }
    

    I found here 的依据。

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

    【讨论】:

    • 你能继续回答吗?抱歉,哈哈,我收到您上述答案的错误。一会就发帖
    • 原来你遇到了一个错误! isSuperset doesn't work properly in Swift 3
    • 无论如何,非常感谢您提供可行的解决方案!我已经为此绞尽脑汁好几个小时了。
    • 迈克尔,想要求进一步澄清。为什么我们在设置 isSuperset 变量时,要加上“== nil”?考虑到 func 返回一个布尔值,为什么我们不能简单地说“= true”?
    • 基本上该行的意思是:“返回字符串中与允许集中找到的字符 NOT 匹配的任何字符的范围” .因此,如果找不到范围,string 将被该超集覆盖(没有返回范围等于 nil,这使得 isSuperset 为真)。如果找到一个范围,则其中存在无效/不允许的字符(即 isSuperset 设置为 false 并且 string 不会更改)希望这有意义吗?
    猜你喜欢
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多