簡體   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