swift - "??"在 : let x = y ? 的上下文中代表什么? "Candy bar"

标签 swift operators

我是 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)
}

最佳答案

用于校验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

关于swift - "??"在 : let x = y ? 的上下文中代表什么? "Candy bar",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35331397/

相关文章:

ios - 根据数组值快速创建 UI 组件

ios - 在 IOS 的 webview 中不断检查互联网连接

swift - detailTextLabel 不会在 ios 8 swift 中更新

ruby - 通过方法语法调用的运算符方法的优先级

c++ - 运算符优先级(bool 之前是否为 void*?)

c++ 转换运算符没有候选更好

c++ - 如何修改 vector 成员的值?

ios - 如何在 Swift 2.0 for iOS 中使用 Metal 制作球体?

Javascript 编程 : Is dot [.] 总是一个运算符(operator)?

ios - 在 Realm 中动态创建模式