необязательный тип "Bool" не может использоваться как логическое значение; Test for '!=шь вместо
необязательный тип "Bool" не может использоваться как логическое значение; Test for '!=шь вместо
сначала я получил ошибку если, заменив условие 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(userEmail!.isEmpty || userPassword!.isEmpty || userRepeatPassword!.isEmpty)
вы не можете проверить значение необязательного, так как, вы, вероятно, уже знаете,быть необязательным означает, что он может или не может быть там. Одно решение называется force unwrapping
и это делается с помощью "!"( восклицательный знак ). "?"(вопросительный знак ) просто позволяет компилятору знать там может быть или не может быть значение так, используя "!- мы скажем компилятору, что знаем!--3-->это может быть или не быть значение внутри этой переменной, но мы там знаем будет один, даже если это пустая строка, в отличие от других языков программирования, которые рассматривают пустые строки или пустые массивы, такие как "false". Это не так быстро.
ваше выражение внутри условного оператора должны быть допустимым логическим результатом.
С необязательными логическими значениями он работает немного по-другому, вам нужно явно проверить, равно ли значение nil. Так вот почему ваш 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)
}
вы также можете использовать
performSegueWithIdentifier ("yourMainScreenIdentifier", отправитель: nil), если вы не используете presentViewController
способ, как:
else {
//success
//perform segue here to correct screen
performSegueWithIdentifier("yourMainScreenIdentifier", sender: nil)
}
Я добавлю в то, что я предполагаю ваш displayMyAlertMessage
- это:
func displayMyAlertMessage(alert: String) {
println(alert)
}