繁体   English   中英

?? Swift中的运算符

[英]?? operator in Swift

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

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

它的解释是:

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

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

它是“nil coalescing operator”(也称为“默认运算符”)。 a ?? b a ?? b是值a (即a! ),除非anil ,在这种情况下,它产生b 即如果favouriteSnacks[person]失踪,则返回指定"Candy Bar"

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

let something = a != nil ? a! : b
let something = a ?? b

手段

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

零合并算子a ?? b a ?? ba != nil ? a! : b的快捷方式a != nil ? a! : b 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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM