2015-09-18 18 views
5

mein Code vor dem migation zu Swift 2.0:Was bedeutet der Unterstrich in diesem Fall?

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 
    } 
} 

die Migration sagte mir, es

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 
    } 

oder

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

zu

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

ich

zu ändern kann nicht sehen, was ist _ = steht für :-(

Antwort

8

_ ist ein Platzhalter. Dies bedeutet, dass die Werte _ ignoriert werden.

Das Migrationstool von Xcode hat dies geändert, weil es festgestellt hat, dass Sie source oder myArray nirgendwo verwendet haben. Diese Variablen wurden daher durch den Platzhalter ersetzt.

Jetzt werden das zurückgebende Ergebnis von segue.sourceViewController as! RhymeViewController und das zurückgebende Ergebnis von [String]() nicht einer Variablen zugewiesen, sondern ignoriert.

Das zurückgegebene Ergebnis wird ignoriert, aber der Ausdruck wird zur Laufzeit noch ausgewertet: Wenn es Nebenwirkungen hat, treten diese Effekte auf.

Also, wenn Sie diese Anweisungen tatsächlich nicht brauchen, sollten Sie sie vollständig loswerden.

+0

werden sie ignoriert oder handelt es sich nur um eine Compiler-Optimierung, da kein Verweis auf eine Variable gespeichert werden muss, die nicht verwendet wird? – jarryd

+1

Sie werden berechnet (ausgewertet), aber das zurückliefernde Ergebnis (falls vorhanden) wird nicht im Speicher zugewiesen, es ist ungültig. – Moritz

+0

zur Kompilierungszeit und nicht zur Laufzeit ausgewertet – jarryd

Verwandte Themen