Необязательный тип "Bool" не может использоваться как логическое значение; Вместо этого проверьте '!= Nil'
необязательный тип "Bool" не может использоваться как логическое значение; Вместо этого проверьте '!= Nil'
Сначала я получил ошибку if, заменив условие if (after
), второе, если условие никогда не выполнялось. Любая идея?
До:
if(userEmail?.isEmpty || userPassword?.isEmpty || userRepeatPassword?.isEmpty){
displayMyAlertMessage("All fields are required")
return
}
if(userPassword != userRepeatPassword){
displayMyAlertMessage("Passwords do not match.")
}
После:
if(userEmail != nil || userPassword != nil || userRepeatPassword != nil){
displayMyAlertMessage("All fields are required")
return
}
if(userPassword != userRepeatPassword){
displayMyAlertMessage("Passwords do not match.")
}
4 ответа
Вы проверяете, отличается ли значение от нуля, и возвращаете, если оно есть, на основе ваших комментариев и вашего второго, если вы, вероятно, хотите проверить, является ли оно нулевым.
println("Checking login details")
if(userEmail.isEmpty || userPassword.isEmpty || userRepeatPassword.isEmpty){
displayMyAlertMessage("All fields are required")
println("Fail to login not all fields where fill")
return
} else if(userPassword != userRepeatPassword){
displayMyAlertMessage("Passwords do not match.")
println("Fail to login password does not match")
} else {
var uiAlert = UIAlertController(title: "Alert", message: "Registration was successful", preferredStyle: UIAlertControllerStyle.Alert)
self.presentViewController(uiAlert, animated: true, completion: nil)
uiAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { action in
dismissViewControllerAnimated(true, completion:nil)
}))
}
Вам нужно обернуть его !
вместо ?
,
Это решит сообщение об ошибке:
if (username!.isEmpty) .....
if(userEmail!.isEmpty || userPassword!.isEmpty || userRepeatPassword!.isEmpty)
Вы не можете проверить значение необязательного, поскольку, как вы, вероятно, уже знаете, наличие необязательного подразумевает, что оно может или не может быть там. Одно решение называется force unwrapping
и это делается с помощью "!" (восклицательный знак). "?" (знак вопроса) просто сообщает компилятору, что может быть или не быть значением, поэтому используйте "!" мы сообщаем компилятору, что мы знаем, что это может быть, а может и не быть значением внутри этой переменной, НО мы знаем, что она будет, даже если это ПУСТАЯ СТРОКА, в отличие от других языков программирования, которые рассматривают пустые строки или пустые массивы, такие как "ложь". Это не так быстро.
Ваше выражение внутри условного оператора ДОЛЖНО быть действительным логическим результатом.
С необязательными логическими значениями это работает немного по-другому, вам нужно явно проверить, имеет ли значение ноль. Так что именно поэтому ваш After:
работает а не твой Before:
//now this is checking if your values are nil (empty) rather than not nil
//before if a user had valid fields, it would say that "All fields are required"
//now, this will work
if(userEmail == nil || userPassword == nil || userRepeatPassword == nil){
displayMyAlertMessage("All fields are required")
} else if(userPassword != userRepeatPassword){
displayMyAlertMessage("Passwords do not match.")
} else {
//success
//perform segue here to correct screen
}
Есть несколько вариантов того, как вы можете выполнить переход, я выберу presentViewController
метод, см. ниже о том, как интегрировать это....
else {
//success
//perform segue here to correct screen
presentViewController(yourMainScreenViewController, animated: true, completion: nil)
}
Вы также можете использовать executeSegueWithIdentifier("yourMainScreenIdentifier", sender: nil), если вы не используете presentViewController
метод, как:
else {
//success
//perform segue here to correct screen
performSegueWithIdentifier("yourMainScreenIdentifier", sender: nil)
}
Я добавлю в то, что я предполагаю, ваш displayMyAlertMessage
является:
func displayMyAlertMessage(alert: String) {
println(alert)
}