这是在函数内部,因此作为参数传递的任何textField都可以响应方法checkForEmptyFields
:
textField.addTarget(self, action: #selector(checkForEmptyFields(sender:)),
for: UIControlEvents.editingChanged)
这是方法checkForEmptyFields
:
func checkForEmptyFields(sender:UITextField){
self.loginButton.isEnabled = (sender.text?.trim().isEmpty)! == false
}
这是String的简单扩展,用于管理修剪:
extension String
{
func trim() -> String
{
return self.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)
}
}
任何事情似乎都运转得很好,但我想知道这是否是正确的方法,如果我忘了重要的事情(或者我犯了任何错误)。谢谢!
答案 0 :(得分:2)
确保文本不是零也可能更安全。
func checkForEmptyFields(sender: UITextField) {
let isTextEmpty = sender.text?.trim().isEmpty ?? true
self.loginButton.isEnabled = !isTextEmpty
}
你的整体方法似乎很好。
正如@matt在评论中建议的那样,可以将一些此行为封装到UITextField
的扩展名中。
extension UITextField {
var isEmpty: Bool {
return self.text?.trim().isEmpty ?? true
}
}
您的功能可以简化为:
func checkForEmptyFields(sender: UITextField) {
self.loginButton.isEnabled = !sender.isEmpty
}
附注:扩展程序的“Swiftier”名称为trimmed()
,因为它返回了一个新的String
实例。这符合Swift API Design Guidelines。
答案 1 :(得分:1)
根据我上面的评论,不要强行打开包装。真!
我可能会像......一样处理它。
func checkForEmptyFields(sender: UITextField) {
if let trimmedText = sender.text?.trim(), !trimmedText.isEmpty {
loginButton.isEnabled = true
} else {
loginButton.isEnabled = false
}
}
它更详细,但我认为这清楚地说明了你的意图 - 无法合并有时会让人感到困惑,无法阅读和调试(如果它是?? true
或?? false
?)