gpt4 book ai didi

swift - UITextFieldDelegate 的 shouldChangeCharactersIn 方法 - 为什么不能组合条件语句来检查小数点分隔符和字母的数量

转载 作者:行者123 更新时间:2023-11-30 12:48:56 33 4
gpt4 key购买 nike

为什么我的 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

}

编辑:我明白了。第一个示例不可能工作,因为 existingTextHasDecimalSeparatorreplacementTextHasDecimalSeparator 基本上确定文本字段中是否有小数以及用户是否尝试输入新的小数,以返回假。当我添加

&& replacementTextHasLetter != nil

对于条件来说,它并没有真正达到目的,因为所有的陈述不可能同时为真。谢谢@sonofabeach

最佳答案

这两行:

if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil {
return false
}

if replacementTextHasLetter != nil {
return false
}

实际上与以下内容相同:

if (existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil) || replacementTextHasLetter != nil {
return false
}

请注意最后一个条件使用 || 而不是 &&

关于swift - UITextFieldDelegate 的 shouldChangeCharactersIn 方法 - 为什么不能组合条件语句来检查小数点分隔符和字母的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41253387/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com