“??”是什么意思?在上下文中代表:let x = y ?? "Candy bar"
What does "??" stand for in the context of: let x = y ?? "Candy bar"
我是 Swift 的新手。有人可以告诉我什么“??”在
的上下文中代表什么以及它的功能是什么
let snackName = favoriteSnacks[person] ?? "Candy bar"
我已经包含了下面的完整代码:
struct Item{
var price: Int
var count: Int
}
class VendingMachine {
var inventory = [
"Candy bar": Item(price: 12, count: 7),
"Chips": Item(price: 10, count: 4),
"Pretzels": Item(price: 7, count: 11)
]
var coinsDeposited = 0
func dispenseSnack(snack: String){
print("dispensing \(snack)")
}
func vend(itemNamed name: String) throws {
guard var item = inventory[name] else {
throw VendingMachineError.InvalidSelection
}
guard item.count > 0 else {
throw VendingMachineError.OutOfStock
}
guard item.price <= coinsDeposited else {
throw VendingMachineError.InsufficientFunds(coinsNeeded: item.price - coinsDeposited)
}
coinsDeposited -= item.price
--item.count
inventory[name] = item
dispenseSnack(name)
}
}
let favoriteSnacks = [
"Alice": "Chips",
"Bob": "Licorice",
"Eve": "Pretzels",
]
func buyFavoriteSnack(person: String, vendingMachine: VendingMachine) throws {
let snackName = favoriteSnacks[person] ?? "Candy bar"
try vendingMachine.vend(itemNamed: snackName)
}
让我根据它在其他语言中的含义来假设这里:
let snackName = favoriteSnacks[person] ?? "Candy bar"
??检查 favoriteSnacks[person] 的值是否为空。如果不是,则 favoriteSnacks[person] 的值将分配给 snackName。如果 favoriteSnacks[person] 的值为 null,则 "Candy bar" 将分配给 snackName。
它用于在 favoriteSnacks[person] 为空的情况下具有默认值。
它的 Nil Coalescing Operator 基本上给出了值不存在时的默认值。
另见 Providing a default value for an Optional in Swift?
用于校验nil,如果你的值为nil,则赋默认值。
let favoriteSnacks = [
"Alice": "Chips",
"Bob": "Licorice",
"Eve": "Pretzels",
]
根据您的代码,
suppose person = "Eve"
let snackName = favoriteSnacks["Eve"] ?? "Candy bar"
它将首先尝试从字典中查找值,即 favoriteSnacks["Eve"]
将为您提供值 "Pretzels"
。
所以它会将值 Pretzels
赋值给 snackName
变量。
suppose person = "Allen"
let snackName = favoriteSnacks["Allen"] ?? "Candy bar"
它将首先尝试从字典中查找值,即 favoriteSnacks["Allen"]
将为您提供值 nil
。
在这种情况下,它会将默认值 "Candy bar"
分配给您的变量 snackName
。
例如。如果你在字典中只得到 5 个键和值,但有时得到 nil 键或值,那么 nil 值就会出错。
所以,这里的解决方案,
var strName = jsonObjectName ?? "Unknown"
var intAge = jsonObjectAge ?? 25
这意味着,如果 jsonObjectName 为 nil,则 "Unknown" 将自动设置为 strName。
注:默认值由“??值”提供
简单说明,
let value = x ?? y
类似于写作,
let value = x != nil ? x! : y
它检查 x 是否包含 nil,如果不包含则强制展开它,否则 returns 在上述情况下是 y。
我是 Swift 的新手。有人可以告诉我什么“??”在
的上下文中代表什么以及它的功能是什么let snackName = favoriteSnacks[person] ?? "Candy bar"
我已经包含了下面的完整代码:
struct Item{
var price: Int
var count: Int
}
class VendingMachine {
var inventory = [
"Candy bar": Item(price: 12, count: 7),
"Chips": Item(price: 10, count: 4),
"Pretzels": Item(price: 7, count: 11)
]
var coinsDeposited = 0
func dispenseSnack(snack: String){
print("dispensing \(snack)")
}
func vend(itemNamed name: String) throws {
guard var item = inventory[name] else {
throw VendingMachineError.InvalidSelection
}
guard item.count > 0 else {
throw VendingMachineError.OutOfStock
}
guard item.price <= coinsDeposited else {
throw VendingMachineError.InsufficientFunds(coinsNeeded: item.price - coinsDeposited)
}
coinsDeposited -= item.price
--item.count
inventory[name] = item
dispenseSnack(name)
}
}
let favoriteSnacks = [
"Alice": "Chips",
"Bob": "Licorice",
"Eve": "Pretzels",
]
func buyFavoriteSnack(person: String, vendingMachine: VendingMachine) throws {
let snackName = favoriteSnacks[person] ?? "Candy bar"
try vendingMachine.vend(itemNamed: snackName)
}
让我根据它在其他语言中的含义来假设这里:
let snackName = favoriteSnacks[person] ?? "Candy bar"
??检查 favoriteSnacks[person] 的值是否为空。如果不是,则 favoriteSnacks[person] 的值将分配给 snackName。如果 favoriteSnacks[person] 的值为 null,则 "Candy bar" 将分配给 snackName。
它用于在 favoriteSnacks[person] 为空的情况下具有默认值。
它的 Nil Coalescing Operator 基本上给出了值不存在时的默认值。
另见 Providing a default value for an Optional in Swift?
用于校验nil,如果你的值为nil,则赋默认值。
let favoriteSnacks = [
"Alice": "Chips",
"Bob": "Licorice",
"Eve": "Pretzels",
]
根据您的代码,
suppose person = "Eve"
let snackName = favoriteSnacks["Eve"] ?? "Candy bar"
它将首先尝试从字典中查找值,即 favoriteSnacks["Eve"]
将为您提供值 "Pretzels"
。
所以它会将值 Pretzels
赋值给 snackName
变量。
suppose person = "Allen"
let snackName = favoriteSnacks["Allen"] ?? "Candy bar"
它将首先尝试从字典中查找值,即 favoriteSnacks["Allen"]
将为您提供值 nil
。
在这种情况下,它会将默认值 "Candy bar"
分配给您的变量 snackName
。
例如。如果你在字典中只得到 5 个键和值,但有时得到 nil 键或值,那么 nil 值就会出错。 所以,这里的解决方案,
var strName = jsonObjectName ?? "Unknown"
var intAge = jsonObjectAge ?? 25
这意味着,如果 jsonObjectName 为 nil,则 "Unknown" 将自动设置为 strName。
注:默认值由“??值”提供
简单说明,
let value = x ?? y
类似于写作,
let value = x != nil ? x! : y
它检查 x 是否包含 nil,如果不包含则强制展开它,否则 returns 在上述情况下是 y。