guard let error:条件绑定的初始化程序必须具有可选类型而不是'String'

时间:2016-06-16 11:37:44

标签: swift swift2 guard-statement

我在使用后卫时遇到致命错误。这是错误:

  

条件绑定的初始化程序必须具有可选类型   '字符串'

在我使用的代码下面:

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

2 个答案:

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