这是测试字段是否为空的正确方法吗?

时间:2017-11-17 16:19:25

标签: swift3

这是在函数内部,因此作为参数传递的任何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)
    }
}

任何事情似乎都运转得很好,但我想知道这是否是正确的方法,如果我忘了重要的事情(或者我犯了任何错误)。谢谢!

2 个答案:

答案 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?)