?? Swift中的运算符

avi*_*ara 54 ios swift

在"The Swift Programming Language"一书(第599页)中,我遇到了这段令我困惑的代码片段.它是这样的:

func buyFavoriteSnack(person:String) throws {
    let snackName = favoriteSnacks[person] ?? "Candy Bar"
    try vend(itemName:snackName)
}
Run Code Online (Sandbox Code Playgroud)

它的解释是:

buyFavoriteSnack(_ :)函数查找给定人最喜欢的零食,并尝试为他们购买.如果他们没有列出最喜欢的零食,它会尝试买一个糖果棒.如果他们...

这个解释如何映射到"??" 给定代码中的运算符.什么时候应该/我们可以在自己的代码中使用这种语法吗?

Ama*_*dan 76

它是"nil coalescing operator"(也称为"默认运算符").a ?? ba(即a!)的价值,除非anil,在这种情况下它产生b.即如果favouriteSnacks[person]缺少,则返回分配"Candy Bar".

编辑 技术上可以解释为:(来自下面的Badar Al-Rasheed的答案)

let something = a != nil ? a! : b
Run Code Online (Sandbox Code Playgroud)


Bad*_*eed 24

let something = a ?? b
Run Code Online (Sandbox Code Playgroud)

手段

let something = a != nil ? a! : b
Run Code Online (Sandbox Code Playgroud)


Ica*_*aro 18

这个:

let snackName = favoriteSnacks[person] ?? "Candy Bar"
Run Code Online (Sandbox Code Playgroud)

等于这个:

if favoriteSnacks[person] != nil {
    let snackName = favoriteSnacks[person]    
} else {
    let snackName = "Candy Bar"
}
Run Code Online (Sandbox Code Playgroud)

用语言解释,如果let声明未能从中获取person,favoriteSnacks将指定Candy BarsnackName


Muh*_*cha 6

零合并运算符a ?? b是一个快捷方式a != nil ? a! : b