我在使用后卫时遇到致命错误。这是错误:
条件绑定的初始化程序必须具有可选类型 '字符串'
在我使用的代码下面:
@IBAction func signUpButtonPressed(sender: UIButton) {
guard let email = emailTextField.text! where emailTextField.text!.characters.count > 0 else {
// alert
return
}
guard let password = passwordTextField.text! where passwordTextField.text!.characters.count > 0 else {
// alert
return
}
self.registerUserAsync(email, password: password)
}
答案 0 :(得分:2)
你应该非常小心选项。使用!
告诉Swift编译器您可以保证该值存在。
试着这样做:
@IBAction func signUpButtonPressed(sender: UIButton) {
guard let email = emailTextField.text where email.characters.count > 0 else {
// alert
return
}
guard let password = passwordTextField.text where password.characters.count > 0 else {
// alert
return
}
self.registerUserAsync(email, password: password)
Swift还引入了可选类型,它们处理缺少值。 Optionals说“有一个值,它等于x”或“根本没有值”。
有关您可以在此处找到的选项的更多信息https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309
答案 1 :(得分:0)
您正在展开使绑定无意义的可选项,并导致错误:
emailTextField.text! // see the exclamation mark
错误消息说条件绑定必须是可选的(默认情况下text
属性是可选的),所以只需删除感叹号:
emailTextField.text
更简单的语法是isEmpty
,您可以将代码缩减为一个guard
语句。
@IBAction func signUpButtonPressed(sender: UIButton) {
guard let email = emailTextField.text where !email.isEmpty,
let password = passwordTextField.text where !password.isEmpty else {
return
}
self.registerUserAsync(email, password: password)
}