我使用这段代码来限制有关键盘的用户输入。
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% 的效果都很好,不幸的是句点/小数点没有记录。不确定为什么会发生这种情况?
最佳答案
这似乎是 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/