необязательный тип "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)
}
