ios - descargar - ?? operador en Swift
swift download (5)
El operador de fusión nula
a ?? b
a ?? b
es un atajo para
a != nil ? a! : b
a != nil ? a! : b
En el libro "El lenguaje de programación rápido" (página 599), encontré este fragmento de código que me confundió. Fue así:
func buyFavoriteSnack(person:String) throws {
let snackName = favoriteSnacks[person] ?? "Candy Bar"
try vend(itemName:snackName)
}
Su explicación fue:
La función buyFavoriteSnack (_ :) busca el bocadillo favorito de la persona y trata de comprarlo para ellos. Si no tienen una merienda favorita en la lista, trata de comprar una barra de chocolate. Si ellos...
¿Cómo puede esta explicación correlacionarse con el "??" operador en el código dado. ¿Cuándo deberíamos / podemos usar esta sintaxis en nuestro propio código?
Es "operador de fusión nula" (también llamado "operador predeterminado").
a ?? b
a ?? b
es el valor de
a
(es decir,
a!
), a menos que
a
sea
nil
, en cuyo caso produce
b
.
Es decir, si falta
favouriteSnacks[person]
, devuelva asignar
"Candy Bar"
en su lugar.
EDITAR técnicamente se puede interpretar como: (De la respuesta de Badar Al-Rasheed a continuación)
let something = a != nil ? a! : b
Esta:
let snackName = favoriteSnacks[person] ?? "Candy Bar"
Es igual a esto:
if favoriteSnacks[person] != nil {
let snackName = favoriteSnacks[person]
} else {
let snackName = "Candy Bar"
}
Explicando en palabras, si la declaración
let
no puede tomar a la
person
de los
favoriteSnacks
snackName
, asignará Candy Bar al
snackName
Una adición a la respuesta de @ Icaro puede declarar valores sin inicializarlos. En mi opinión, esto es mejor:
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)
}
let something = a ?? b
medio
let something = a != nil ? a! : b