检查 UITextfield 中十进制输入的有效性

checking validity of decimal input in UITextfield

其中一个 UITextfield 输入应该接受小数。但我想限制用户只能输入一个“.”,否则如果有多个“.”,浮点转换就会搞砸。在数量上。如何确保用户不会键入多个“.”作为十进制输入的一部分?

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if ( textField == areaTextField) {
            guard CharacterSet(charactersIn: "0123456789.").isSuperset(of: CharacterSet(charactersIn: string)) else {
                return false
            }
        } 
        return true
        
    }

你的方法一开始就是错误的;你想多了。计算机已经知道一个字符串是否是一个有效的数字,所以只要问它就行了。不要检查任何字符。不要检查任何键。只需执行参数描述的替换并询问计算机结果是否为数字:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let rep = (textField.text! as NSString).replacingCharacters(in: range, with: string)
    return rep.count == 0 || Double(rep) != nil
}