2

使用 guard let 时出现致命错误。这是错误:

条件绑定的初始化程序必须具有可选类型而不是“字符串”

在我使用过的代码下方:

@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)
}
4

2 回答 2

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 还引入了可选类型,用于处理值的缺失。可选项要么说“有一个值,它等于 x”,要么说“根本没有一个值”。

有关选项的更多信息,您可以在此处找到https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309

于 2016-06-16T11:45:37.607 回答
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)
}
于 2016-06-16T11:51:40.130 回答