Un optional è impostato o non impostato (non nullo o nullo) ... lasciandoci con una decisione importante. "Come dovremmo scrivere il nostro codice in modo che possa funzionare correttamente per 2 entrambi gli stati?". Il modo in cui scartiamo gli optional è ciò che decide per noi.
Esistono diversi approcci che è possibile utilizzare per contrastare un facoltativo non impostato.
- Crash!
- Imposta il valore predefinito su qualcosa, se non è stato impostato.
- Fallire con grazia cioè non fare nulla, ma anche se il valore è stato impostato, assegnarlo.
- Fallire con grazia, cioè non fare nulla, tuttavia se il valore è stato impostato ... fare qualcosa (è solo più di un singolo compito).
Di seguito sono riportati i 4 approcci
L'utilizzo dello scartamento forzato andrà in crash se non si dispone di un valore. Dovresti farlo se avere quel valore è di vitale importanza, ad esempio il titolo di un film (ogni film DEVE avere un nome). !
viene utilizzato per lo scartamento forzato.
movieTitle = movie.title!
L'uso della coalescenza zero è un altro modo che ti darà più controllo , il che significa che non si bloccherà se il valore non è impostato, né "non lo imposterebbe nulla" se non fosse impostato ... farebbe quello che gli dici per fare, ad esempio, imposterà il nome del film su untitled_movie se non è stato impostato alcun nome. ??
viene utilizzato per la coalescenza nulla.
var movieTitle = movie.title ?? "untitled_Movie"
L'utilizzo del concatenamento opzionale non farà nulla se non si dispone di un valore e imposterà il valore se si dispone di un valore. Lo fai per qualcosa che ha il suo valore impostato non è di vitale importanza, ad esempio per il nome dell'agente del tuo attore . ?
viene utilizzato per il concatenamento opzionale.
let agent = movie.leadActor?.agent
let agent = movie.leadActor!.agent
L'utilizzo if-let
(o guard
che sono due diversi tipi di associazione facoltativa ) ti darà più controllo , non si bloccherà se il valore non è impostato. Se il valore è impostato, puoi fare qualcosa. Se non è impostato, puoi aggiungere else
un'istruzione.
if let supportingActor = movie.supportingActor{
print(" The supporting actor is \(supportingActor)}
Questo è il modo più comunemente utilizzato per scartare, poiché lo scartamento forzato è in qualche modo scoraggiato. Per ulteriori discussioni sul motivo per cui è scoraggiato, vedere qui . Per un buon confronto tra guard
e if-let
vedereguard vs. if-let
Nota a margine:
Il legame opzionale e il concatenamento opzionale sono comunemente usati insieme:
if let agent = movie.leadActor?.agent {
ContactInfo = agent.phoneNumber
}