我正在编写用于textField验证的代码。 textField根本不允许用户输入16 .. <80以外的年龄。我已经在下面编写了代码,感觉质量很差。您提出的使下面的代码更具可读性的建议将非常有帮助。
设置:
创建textField并使其自身成为委托。
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
}
}
}
答案 0 :(得分:0)
您所做的大多数事情都是不必要的。只需计算新字符串是什么,尝试转换为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中存在严重错误,否则范围将有效。