para descargar curso apple ios swift

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