0

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

 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)
}

但是当我输入任何字符时我的程序崩溃了。 在此处输入图像描述

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

4

1 回答 1

0

这似乎是 Swift 中的一个错误,在 Swift 问题跟踪器上有多个关于此问题的问题:https : //bugs.swift.org/browse/SR-3311,https: //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为能够在示例中使用该扩展名。

于 2017-06-23T20:15:04.197 回答