Swift有零凝聚运算符。a ?? b
简称 a != nil ? a : b
. 斯威夫特是否有相反的操作符,一个速记为 a == nil ? a : b
或者换句话说。a == nil ? nil : b
?
我会用它来将一个可选的值映射到其他东西上,就像这样。
let x = dict["key"] != nil ? mapValue(dict["key"]) : nil
// ideally: let x = dict["key"] ¿¿ mapValue(dict["key"])
dict["key"]
返回一个可选的值,如果它存在,你想把它映射到另一个值,或者得到 nil
不然的话。这正是 Optional.map()
是为。
评价给定的结尾,当这个
Optional
实例不是nil
,将未封装的值作为参数传递。
在你的例子中。
let x = dict["key"].map { mapValue($0) }
或者干脆
let x = dict["key"].map(mapValue)
这也比
let x = dict["key"] != nil ? mapValue(dict["key"]) : nil
// or the hypothetical
let x = dict["key"] ¿¿ mapValue(dict["key"])
该 dict["key"]
只评估一次,而不是两次。