?? operator in Swift
Solution 1
It is "nil coalescing operator" (also called "default operator"). a ?? b
is value of a
(i.e. a!
), unless a
is nil
, in which case it yields b
. I.e. if favouriteSnacks[person]
is missing, return assign "Candy Bar"
in its stead.
EDIT Technically can be interpreted as: (From Badar Al-Rasheed's Answer below)
let something = a != nil ? a! : b
Solution 2
let something = a ?? b
means
let something = a != nil ? a! : b
Solution 3
This:
let snackName = favoriteSnacks[person] ?? "Candy Bar"
Is equals this:
if favoriteSnacks[person] != nil {
let snackName = favoriteSnacks[person]
} else {
let snackName = "Candy Bar"
}
Explaining in words, if the let
statement fail to grab person
from favoriteSnacks
it will assigned Candy Bar to the snackName
Solution 4
The nil-coalescing operator a ?? b
is a shortcut for a != nil ? a! : b
Solution 5
One addition to @Icaro's answer you can declare values without initialize them. In my opinion this is better:
func buyFavoriteSnack(person:String) throws {
// let snackName = favoriteSnacks[person] ?? "Candy Bar"
let snackName: String
if let favoriteSnackName = favoriteSnacks[person] {
snackName = favoriteSnackName
} else {
snackName = "Candy Bar"
}
try vend(itemName:snackName)
}
Comments
-
avismara about 4 years
In the "The Swift Programming Language" book (page 599), I came across this code snippet that kind of confused me. It went like this:
func buyFavoriteSnack(person:String) throws { let snackName = favoriteSnacks[person] ?? "Candy Bar" try vend(itemName:snackName) }
Its explanation was:
The buyFavoriteSnack(_:) function looks up the given person's favorite snack and tries to buy it for them. If they don't have a favorite snack listed, it tries to buy a candy bar. If they...
How can this explanation map to the "??" operator in the code given. When should/can we use this syntax in our own code?