的意义是什么 ”??”在快速?

时间:2017-11-18 05:38:58

标签: swift syntax

我在Swift中遇到了一个语法,其中使用了双重问号(“??”)。

例如,let val = something["something"] as? String ?? nil

这究竟是什么意思?这种语法有哪些用例?

3 个答案:

答案 0 :(得分:6)

Nil-Coalescing Operator

这是一种简短的形式。 (表示如果'aaa'nil或可选),您可以指定默认值something["something"]或任何其他值

nil

nil-coalescing运算符(a ?? b)如果包含值,则展开可选a;如果a为n,则返回默认值b。表达式a始终是可选类型。表达式b必须与存储在。

中的类型相匹配

nil-coalescing运算符是下面代码的简写:

a!= nil?一个! :b 上面的代码使用三元条件运算符和强制解包(a!)来访问包含在a不是nil时的值,否则返回b。 nil-coalescing运算符提供了一种更简洁的方式来以简洁易读的形式封装这种条件检查和解包。

如果a的值为非零,则不评估b的值。这被称为短路评估。

下面的示例使用nil-coalescing运算符在默认颜色名称和可选的用户定义颜色名称之间进行选择:

let val = (something["something"] as? String) != nil ? (something["something"] as! String) : "default value"

请参阅Nil-Coalescing Operator here

部分

答案 1 :(得分:1)

这是Swift中的Nil-Coalescing Operator

Nil-Coalescing Operator

  

nil-coalescing运算符(a ?? b)展开一个可选的a if   包含一个值,如果a为nil,则返回默认值b。该   表达式a始终是可选类型。表达式b必须   匹配存储在。

中的类型

但是在您的示例中,您已经使用了可选绑定,因此无需将??与可选项一起使用,如果条件失败,则会自动分配nil

let val = something["something"] as? String ?? nil

如果something["something"] as? String未能提供nilsomething["something"]已经分配String。所以这里不需要这个操作符。

答案 2 :(得分:1)

当赋值的表达式或变量产生可选结果时,此运算符通常用于提供默认值。例如:

let i: Int? = 5
let j: Int? = nil

let value1 = i ?? 9 //value1 will be 5 non-optional
let value2 = j ?? 9 //value2 will be 9 non-optional

您提供的示例尽管语法正确是多余的,因为省略?? nil将不会对结果产生任何结果。