我正在编写文本字段验证代码。文本字段不允许用户输入 16..<80 以外的年龄。我写了下面的代码,我觉得它的质量很差。您关于使下面的代码更具可读性的建议将非常有帮助。
设置:
创建文本字段并委托(delegate)给 self。
extension UserProfileViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let numberFiltered = string.components(separatedBy: NSCharacterSet(charactersIn: "0123456789").inverted).joined(separator: "")
guard string == numberFiltered, range.location < 2 else {
return false
}
if range.location==0, string.intValue == 0 {
return false
}
guard let textFieldValue = textField.text?.intValue, let currentValue = string.intValue else {
return true
}
let totalValue = textFieldValue*10 + currentValue
switch totalValue {
case 16..<80:
return true
default:
textField.text = ""
return false
}
}
}
最佳答案
你所做的大部分事情都是不必要的。只需计算新字符串是什么,尝试转换为 Int
,然后检查范围。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let oldText = textField.text!
let newText = oldText.replacingCharacters(in: Range(range, in: oldText)!, with: string)
if let num = Int(newText), num >= 16 && num < 70 {
return true
}
return false
}
仅供引用 - 这里使用 !
都是安全的。 UITextField text
永远不会返回 nil
,除非 iOS 中存在严重错误,否则该范围将有效。
关于ios - 如何让textField验证代码更加紧凑和可读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52657688/