这是测试字段是否留空的正确方法吗?
Is this the right way to test if a field has been left empty?
这是在函数内部,因此作为参数传递的任何文本字段都可以响应方法 checkForEmptyFields
:
textField.addTarget(self, action: #selector(checkForEmptyFields(sender:)),
for: UIControlEvents.editingChanged)
这是方法checkForEmptyFields
:
func checkForEmptyFields(sender:UITextField){
self.loginButton.isEnabled = (sender.text?.trim().isEmpty)! == false
}
这是用于管理修剪的字符串的简单扩展:
extension String
{
func trim() -> String
{
return self.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)
}
}
似乎一切正常,但我想知道这是否是正确的方法,以及我是否忘记了一些重要的事情(或者我犯了任何错误)。谢谢!
确保文本不为零可能会更安全。
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.
根据我上面的评论,不要强行解包。真的!
我可能会这样处理……
func checkForEmptyFields(sender: UITextField) {
if let trimmedText = sender.text?.trim(), !trimmedText.isEmpty {
loginButton.isEnabled = true
} else {
loginButton.isEnabled = false
}
}
它更冗长,但我认为这清楚地表明了您的意图 - 零合并有时会混淆阅读和调试(应该是 ?? true
还是 ?? false
?)
这是在函数内部,因此作为参数传递的任何文本字段都可以响应方法 checkForEmptyFields
:
textField.addTarget(self, action: #selector(checkForEmptyFields(sender:)),
for: UIControlEvents.editingChanged)
这是方法checkForEmptyFields
:
func checkForEmptyFields(sender:UITextField){
self.loginButton.isEnabled = (sender.text?.trim().isEmpty)! == false
}
这是用于管理修剪的字符串的简单扩展:
extension String
{
func trim() -> String
{
return self.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)
}
}
似乎一切正常,但我想知道这是否是正确的方法,以及我是否忘记了一些重要的事情(或者我犯了任何错误)。谢谢!
确保文本不为零可能会更安全。
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.
根据我上面的评论,不要强行解包。真的!
我可能会这样处理……
func checkForEmptyFields(sender: UITextField) {
if let trimmedText = sender.text?.trim(), !trimmedText.isEmpty {
loginButton.isEnabled = true
} else {
loginButton.isEnabled = false
}
}
它更冗长,但我认为这清楚地表明了您的意图 - 零合并有时会混淆阅读和调试(应该是 ?? true
还是 ?? false
?)