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

标签 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% 的效果都很好,不幸的是句点/小数点没有记录。不确定为什么会发生这种情况?

最佳答案

这似乎是 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 才能在示例中使用该扩展.

关于swift - 创建自己的字符集会导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44728136/

相关文章:

python - 使用标准库 Decimal 将运算符应用于非常长的十进制数时抑制科学记数法

swift - 在真实设备 iOS Swift 上进行单元测试时尝试生成随 secret 钥对时出错

swift - 无法从通用结构调用通用函数

c++ - 如何从字符中检索整数值?

C# 是 nullable decimal 的 nullable int 后代

clojure - 如何使用 clojure 或 jython 修剪数字的小数?

SwiftUI 生命周期应用程序 : How to change Status Bar Color

ios - 如何在 Swift 中自定义 uibutton 的类?

c++ - 专家的字符串和字符映射问题

string - 如何获取字符串中的字符数