如何在三元条件运算符中使用Optional变量?

Yas*_*ddy 56 ternary-operator swift

我想使用一个可选变量与三元条件运算符,但它抛出错误此错误:可选不能用作布尔值.我究竟做错了什么?

var str1: String?
var myBool:Bool
myBool = str1 ? true : false
Run Code Online (Sandbox Code Playgroud)

Dha*_*esh 81

你不能将字符串值赋给bool,但你可以检查str1是否为nil或者不是这样的:

myBool = str1 != nil ? true : false
print(myBool)
Run Code Online (Sandbox Code Playgroud)

它将打印为false,因为str1为空.

  • 你不需要条件表达式,只需:`myBool = str1!= nil` (7认同)
  • 我认为条件是显示语法 (4认同)

Abh*_*eet 65

也可以使用Nil Coalescing Operator.下面的代码使用三元条件运算符和强制解包(a!)来访问包含在a不是nil时的值,否则返回b

普通三元算子:

output = a != nil ? a! : b Apple Developer Link:请参阅演示链接

在Swift 1.2和2中,上面的代码行被更短的格式替换:

output = a ?? b
Run Code Online (Sandbox Code Playgroud)

演示链接:nil合并运算符(a ?? b)如果包含值,则展开可选a;如果a为n,则返回默认值b.


Rob*_*ins 5

如果您想要的值是可选属性(在Swift 3.0中)的属性或函数调用的结果,则这甚至可以很好地工作:

return peripheral?.connected ?? false
Run Code Online (Sandbox Code Playgroud)


Jac*_*ack 5

三元运算符针对三个目标进行操作。与C一样,Swift也只有一个三元运算符,即三元条件运算符(a?b:c)。

用法示例tableView-

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     return section == 2 ?  4 :  1
}
Run Code Online (Sandbox Code Playgroud)

指示段是否等于2,则返回4,否则返回1(如果为false)。