Ошибка let let: инициализатор для условного связывания должен иметь необязательный тип, а не 'String'

Я получил фатальную ошибку. Вот ошибка:

Инициализатор для условного связывания должен иметь необязательный тип, а не 'String'

Ниже моего кода, который я использовал:

@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 ответа

Решение

Вы должны быть очень осторожны с опциями. С помощью ! Вы говорите компилятору 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

Вы разворачиваете необязательное, что делает связывание бессмысленным и вызывает ошибку:

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)
}
Другие вопросы по тегам