2016-02-11 52 views
0

我是新來的斯威夫特。有人能告訴我什麼是「??」代表,什麼是它在什麼「??」在上下文中代表:let x = y ?? 「糖果吧」

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) 
} 
+1

這是一個默認值,如果沒有收藏夾 –

+2

請參閱http://nshipster.com/swift-operators/並搜索「swift operators」;這種搜索「技巧」適用於任何語言。通過隔離符號的類型(「運營商」),然後使用本地化(在頁面中)搜索.. – user2864740

+1

它被稱爲nil合併運算符 –

回答

4

其用於檢查零,如果你的價值將是零,你會指定缺省值。

let favoriteSnacks = [ 
    "Alice": "Chips", 
    "Bob": "Licorice", 
    "Eve": "Pretzels", 
] 

從您的代碼,

假設人= 「夏娃」

let snackName = favoriteSnacks["Eve"] ?? "Candy bar" 

它首先會嘗試找到字典值,即favoriteSnacks["Eve"]會給你珍惜"Pretzels"

因此它會指定值PretzelssnackName變量。

假設人= 「艾倫」

let snackName = favoriteSnacks["Allen"] ?? "Candy bar" 

它首先會嘗試找到字典值,即favoriteSnacks["Allen"]會給你的價值nil

在這種情況下,它將爲您的變量snackName分配默認值"Candy bar"

+0

非常感謝你的詳細解釋!非常感謝您的幫助! – Thor

+0

@dzjustinli歡迎您。 –

2

讓我請假設此基於其在其他語言中的意思:

let snackName = favoriteSnacks[person] ?? "Candy bar" 

??檢查favoriteSnacks [person]的值是否爲空。如果不是,那麼favoriteSnacks [person]的值將被分配給snackName。如果favoriteSnacks [person]的值爲null,那麼會將「Candy bar」分配給snackName。

它用於具有默認值的情況下情況下,bestSnacks [人]爲空。

相關問題