2014-12-12 14 views

risposta

110

Il nil-coalescenza operatore a ?? b è una scorciatoia per

a != nil ? a! : b 

restituisce sia l'operando di sinistra scartare o l'operando di destra. Così il tipo di foo è String e la seconda linea dovrebbe essere

var bar = some_func(string: foo) 

senza il punto esclamativo perché foo non è un optional e non può essere da scartare.

(Se si cambia la prima linea a

let foo: String? = dict["key"] as? String ?? "empty" 

allora il risultato del lato destro è avvolto in una stringa opzionale di nuovo, e ha bisogno essere scartato nella seconda riga. Rende l'errore andare via, ma questo non è probabilmente quello che volete.)

4

tuo foo sarà un non String un String? perché l'operatore coalescenza nil ?? sarà o scartare il cast condizionale, se è .some (con un conseguente String) o utilizzerà "empty", che è anche un String.

Problemi correlati