?? 运算符在Swift中
在“Swift编程语言”一书(第599页)中,我遇到了这样的代码片段,使我感到困惑。 它是这样的:
func buyFavoriteSnack(person:String) throws { let snackName = favoriteSnacks[person] ?? "Candy Bar" try vend(itemName:snackName) }
其解释是:
buyFavoriteSnack(_ :)function查找给定的人最喜欢的零食,并试图为他们购买。 如果他们没有一个喜欢的小吃上市,它试图买一个糖果。 如果他们…
这个解释怎么能映射到“??” 运营商在给出的代码。 我们应该/我们可以在我们自己的代码中使用这个语法吗?
它是“零合并运营商”(也称为“默认运营商”)。 a ?? b
a ?? b
是a
(即a!
)的值,除非a
是nil
,在这种情况下,它产生b
。 也就是说,如果缺lessfavouriteSnacks[person]
,则返回指定"Candy Bar"
代替。
编辑技术上可以解释为:(从下面的巴达尔·拉希德的答案)
let something = a != nil ? a! : b
这个:
let snackName = favoriteSnacks[person] ?? "Candy Bar"
等于这个:
if favoriteSnacks[person] != nil { let snackName = favoriteSnacks[person] } else { let snackName = "Candy Bar" }
用语言解释,如果let
语句不能从favoriteSnacks
抓取person
,它将把Candy Bar分配给snackName
let something = a ?? b
手段
let something = a != nil ? a! : b
除了@ Icaro的回答之外,您可以声明值而不用初始化它们。 在我看来这是更好的:
func buyFavoriteSnack(person:String) throws { // let snackName = favoriteSnacks[person] ?? "Candy Bar" let snackName: String if let favoriteSnackName = favoriteSnacks[person] { snackName = favoriteSnackName } else { snackName = "Candy Bar" } try vend(itemName:snackName) }