[英]?? 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!
),除非a
是nil
,在這種情況下,它產生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 ?? b
是a != 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.