为什么我的replacementTextHasLetter常量不会阻止我使用以下条件将字母粘贴到我的文本字段中?
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let existingTextHasDecimalSeparator = textField.text?.range(of: ".")
let replacementTextHasDecimalSeparator = string.range(of: ".")
let charactersNotAllowed = NSCharacterSet.letters
let replacementTextHasLetter = string.rangeOfCharacter(from: charactersNotAllowed)
if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil && replacementTextHasLetter != nil {
return false
}
return true
}
但是当它有自己单独的条件时它会起作用吗?
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let existingTextHasDecimalSeparator = textField.text?.range(of: ".")
let replacementTextHasDecimalSeparator = string.range(of: ".")
let charactersNotAllowed = NSCharacterSet.letters
let replacementTextHasLetter = string.rangeOfCharacter(from: charactersNotAllowed)
if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil {
return false
}
if replacementTextHasLetter != nil {
return false
}
return true
}
编辑:我想通了。第一个示例无法正常工作,因为existingTextHasDecimalSeparator和replacementTextHasDecimalSeparator基本上确定文本字段中是否有小数以及用户是否尝试输入新的小数,以返回 false。当我添加
&& replacementTextHasLetter != nil
对于条件,它只是没有真正服务于目的,因为所有陈述不能同时为真。谢谢@sonofabeach