我是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)
}
答案 0 :(得分:4)
用于检查nil,如果您的值为nil,则会指定默认值。
let favoriteSnacks = [
"Alice": "Chips",
"Bob": "Licorice",
"Eve": "Pretzels",
]
来自您的代码,
假设人=&#34;夏娃&#34;
let snackName = favoriteSnacks["Eve"] ?? "Candy bar"
它会首先尝试从字典中查找值,即favoriteSnacks["Eve"]
会为您提供值"Pretzels"
。
因此它会将值Pretzels
分配给snackName
变量。
假设人=&#34;艾伦&#34;
let snackName = favoriteSnacks["Allen"] ?? "Candy bar"
它会首先尝试从字典中查找值,即favoriteSnacks["Allen"]
会为您提供值nil
。
在这种情况下,它会将defalut值"Candy bar"
分配给变量snackName
。
答案 1 :(得分:2)
请允许我根据其在其他语言中的含义来假设:
let snackName = favoriteSnacks[person] ?? "Candy bar"
??检查favoriteSnacks [person]的值是否为null。如果不是那么,favoriteSnacks [person]的值将被分配给snackName。如果favoriteSnacks [person]的值为null,那么“Candy bar”将被分配给snackName。
如果favoriteSnacks [person]为空,则用于具有默认值。
答案 2 :(得分:2)
Nil Coalescing Operator基本上给出了值不存在时的默认值。
答案 3 :(得分:0)
例如如果您在词典中仅获得5个键和值,但有时获得nil键或值,则对于nil值将出现错误。 所以,这里的解决方案,
var strName = jsonObjectName ?? "Unknown"
var intAge = jsonObjectAge ?? 25
这意味着,如果jsonObjectName为nil,则自动将“未知”设置为strName。
注意:“?值”提供的默认值
答案 4 :(得分:0)
简单地解释
let value = x != nil ? x! : y
类似于写作
scans:
Scanner1:
detected: false
version: "1.1.1.1"
result: null
update: "14123412"
Scanner2:
detected: true
version: "2.2.2.2"
result: "trojan"
update: "23142551"
它将检查x是否包含nil,如果不包含nil,则将其强制展开,否则在上述情况下将返回y。