Ошибка 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)
}