2016-02-11 5 views
0

Я новичок в Swift. Может кто-нибудь, пожалуйста, скажите мне, что "??" означает и какова его функция в контекстеЧто такое "??" стоять в контексте: пусть x = y ?? «Candy bar»

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/ - и найдите «быстрые операторы»; этот «трюк» поиска работает практически для любого языка. Выделив тип символа («оператор»), а затем используя локализованный (на странице) поиск .. – user2864740

+1

он называется нильским коалесцирующим оператором –

ответ

4

Его использовали для проверки ноль, если ваше значение будет ноль, то присвоить значение по умолчанию.

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

из кода,

предположит, что человек = "Ева"

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

он сначала пытается найти значение из словаря, т.е. favoriteSnacks["Eve"] даст вам дорожит "Pretzels" ,

поэтому он присвоит значение Pretzels переменной snackName.

предположит, что человек = "Аллен"

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

он сначала пытается найти значение из словаря, т.е. favoriteSnacks["Allen"] даст вам дорожит nil.

В этом случае он назначит значение defalut "Candy bar" вашей переменной snackName.

+0

Большое вам спасибо за подробное объяснение !! Очень ценю вашу помощь! – Thor

+0

@dzjustinli добро пожаловать. –

2

Позвольте мне, пожалуйста, предположим здесь основано на его значение на других языках:

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

?? проверяет, является ли значение favoriteSnacks [person] нулевым. Если это НЕ, то значение favoriteSnacks [person] будет присвоено snackName. Если значение favoriteSnacks [person] равно null, то для параметра snackName будет назначена «Candy bar».

Используется для значения по умолчанию в случае, если favoriteSnacks [person] имеет значение null.

2

Его Nil Coalescing Operator в основном дает значение по умолчанию, когда значение не существует.

смотри также Providing a default value for an Optional in Swift?

+0

не предоставляет ссылку, вместо этого вы можете скопировать вставку текста из этого ссылку и вставить в ответ, потому что могут быть изменения, что веб-страница будет удалена. –

Смежные вопросы