2015-06-03 21 views
8

Ho programmato Swift da alcuni mesi e sono sempre stato curioso di questo ...Vantaggio di dire al compilatore Swift il tipo di un oggetto, invece di dedurre?

C'è un vantaggio nel dire al compilatore Swift il tipo di oggetto nella sua dichiarazione? I.e. let image: UIImage = UIImage()

Rispetto a NOT che dice al compilatore e che ne deduce il tipo in fase di esecuzione. I.e let image = UIImage()

Penso che sarebbe più efficiente dire al compilatore il tipo di oggetto invece di inferire il tipo. So che questa domanda fa appello anche alla sintassi Objective-C, quindi la aggiungerò nei tag.

risposta

10

C'è zero differenza di efficienza di runtime tra i due. Durante la compilazione, Swift sta inferendo il tipo e lo scrive per te. Ma una volta compilate, le due affermazioni sono identiche.

È puramente una questione di leggibilità e, occasionalmente, efficienza del compilatore.

Leggibilità perché nella dichiarazione let image: UIImage = UIImage(), la doppia comparsa di UIImage è solo confusione. E in casi di tipi più complessi, è praticamente essenziale: nessuno vuole scrivere let keys: LazyForwardCollection<MapCollectionView<Dictionary<String, Int>, String>> = dict.keys quando può scrivere let keys = dict.keys.

efficienza del compilatore, perché di tanto in tanto ci si accorge che un tipo particolarmente ambigua (letterali di letterali sono noti per questo) in cui devono essere risolti sacco di sovraccarichi può compilare un molto più velocemente se è il nome in modo esplicito il tipo a sinistra lato mano Ma questa è solo una questione di quanto velocemente compila, non di quanto velocemente funzioni una volta compilato.

2

Da Swift Documentation:

E 'raro che avete bisogno di scrivere annotazioni di tipo nella pratica. Se si fornisce un valore iniziale per una costante o variabile in corrispondenza del punto che si definisce, Swift può quasi sempre dedurre il tipo da utilizzare per quel costante o variabile, come descritto nella Type Safety and Type Inference

Quindi non lo fa importa se dichiari o meno il tipo di istanza.