необязательный тип "Bool" не может использоваться как логическое значение; Test for '!=шь вместо

необязательный тип "Bool" не может использоваться как логическое значение; Test for '!=шь вместо

enter image description here

сначала я получил ошибку если, заменив условие 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". Это не так быстро.

ваше выражение внутри условного оператора должны быть допустимым логическим результатом.


вам нужно обернуть его с ! вместо ?.
Это решит сообщение об ошибке:

if (username!.isEmpty) .....

С необязательными логическими значениями он работает немного по-другому, вам нужно явно проверить, равно ли значение 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)
}