可选类型' Bool'不能用作布尔值;测试'!= nil'代替

时间:2015-06-21 23:34:04

标签: swift optional

  

可选类型' Bool'不能用作布尔值;测试'!= nil'代替

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 个答案:

答案 0 :(得分:4)

if(userEmail!.isEmpty || userPassword!.isEmpty || userRepeatPassword!.isEmpty)

您无法检查可选项的值,因为您可能已经知道,是可选的意味着它可以或不可以。一种解决方案称为force unwrapping,它通过使用“!”来完成。 (感叹号)。 “?” (问号)只是让编译器知道可能是或可能不是值,所以使用“!”我们告诉编译器我们知道它可能或者它可能不是该变量内部的值但是我们知道它会有一个,即使它是一个EMPTY STRING ,与其他编程不同考虑空字符串的语言,或像“false”这样的空数组。在swift中情况并非如此。

条件语句中的表达式必须是有效的布尔结果。

答案 1 :(得分:3)

您正在检查该值是否为nil并且如果是,则根据您的评论返回,如果您可能想检查它是否为零,则检查第二个。

{{1}}

答案 2 :(得分:3)

您需要使用!代替?包裹它 这将解决错误消息:

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

答案 3 :(得分:1)

使用可选的布尔值,它的工作方式略有不同,您需要明确检查值是否为零。这就是您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
}

有几种选择如何执行segue,我将选择使用presentViewController方法,请参阅下面有关如何集成它的方法。 ...

else {
  //success
  //perform segue here to correct screen
  presentViewController(yourMainScreenViewController, animated: true, completion: nil)
}

您也可以使用     performSegueWithIdentifier(" yourMainScreenIdentifier",sender:nil)如果您不使用presentViewController方法,例如:

else {
  //success
  //perform segue here to correct screen
  performSegueWithIdentifier("yourMainScreenIdentifier", sender: nil)
}

我将添加我认为您displayMyAlertMessage的内容:

func displayMyAlertMessage(alert: String) {
  println(alert)
}