2015-09-18 16 views
5

il mio codice prima del migation a Swift 2.0:Cosa significa il trattino basso in questo caso?

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier == "RhymeFavoriten") { 
     // pass data to next view 
     let dest = segue.destinationViewController as! FavoritenViewController 
     let source = segue.sourceViewController as! RhymeViewController // !!!!!! 
     dest.favoritenType = 1 
     dest.delegate = self 
    } 
} 

la migrazione mi ha detto di cambiarlo in

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier == "RhymeFavoriten") { 
     // pass data to next view 
     let dest = segue.destinationViewController as! FavoritenViewController 
     _ = segue.sourceViewController as! RhymeViewController // !!!!!!!!!! 
     dest.favoritenType = 1 
     dest.delegate = self 
    } 

o

func textSelected(selectedText:String, selectedType:Int) { 
     var fullTextArr = text.componentsSeparatedByString("\n") 
     var myArray = [String]() // !!!!!! 

a

func textSelected(selectedText:String, selectedType:Int) { 
     var fullTextArr = text.componentsSeparatedByString("\n") 
     _ = [String]() // !!!!!!!!! 

I non si vede, cosa è _ = in piedi per :-(

risposta

8

_ è un segnaposto. Significa che i valori assegnati a _ vengono ignorati.

Lo strumento di migrazione di Xcode ha apportato queste modifiche perché ha rilevato che non è stato utilizzato lo source o myArray in qualsiasi luogo, quindi ha sostituito queste variabili con il segnaposto.

Ora invece di essere assegnato a una variabile, il risultato di ritorno di segue.sourceViewController as! RhymeViewController e il risultato di ritorno di [String]() vengono ignorati.

Il risultato di ritorno viene ignorato, ma l'espressione è ancora valutata in fase di esecuzione: se ha effetti collaterali, si verificano questi effetti.

Quindi se davvero non hai bisogno di queste istruzioni dovresti liberartene completamente.

+0

vengono ignorati o si tratta solo di un'ottimizzazione del compilatore, in quanto non è necessario memorizzare un riferimento a una variabile che non viene utilizzata? – jarryd

+1

Sono calcolati (valutati) ma il risultato di ritorno (se presente) non è assegnato in memoria, è annullato. – Moritz

+0

valutati in fase di compilazione anziché in fase di esecuzione – jarryd

Problemi correlati