2016-05-13 10 views
1

Ich Swift lernen, und ich kann nicht verstehen, warum dieser Code eine redundante Ausgabe ausgedruckt:Getter genannt unerwartet ein zweites Mal für inout Parameter

class A {} 
var x: A { 
    set { print("set") } 
    get { 
     print("get") 
     return A() 
    } 
} 
func f(inout y: A) { print("f") } 
f(&x) 

Das Ergebnis ist:

get 
f 
set 
get 

Warum die zuletzt hier? Wenn ich einen anderen inout Parameter in f hinzufügen:

class A {} 
var x: A { 
    set { print("set") } 
    get { 
     print("get") 
     return A() 
    } 
} 
func f(inout y: A, inout z: Int) { print("f") } 
var z = 10 
f(&x, z:&z) 

Das neue Ergebnis ist:

get 
f 
set 

Können Sie mir klar?

Antwort

0

Ich vermute, Sie schreiben diesen Code auf dem Spielplatz !?

Wenn Sie es in ein reguläres Projekt einfügen und es im Simulator ausführen, werden Sie dieses Verhalten nicht sehen.
Es tritt nur auf dem Spielplatz.

Auf dem Gerät beide Methoden die erwartete

drucken bekommen
f


einrichten Erläuterung: wie diese

Der Spielplatz Ausführung sieht:

enter image description here

Beachten Sie die A in der letzten Zeile auf der rechten Seite gedruckt? Der Playground versucht den Wert des x anzuzeigen und um ihn anzuzeigen, greift er auf seinen Getter zu! Wenn Sie mehrere Parameter haben, versucht Xcode nichts zu drucken -> das Hinzufügen eines zweiten Parameters führt dazu, dass Xcode nicht einen Wert von get hat.

+0

Ich habe keine Inout-Parameter hinzugefügt. Das Ergebnis ist das gleiche wie zuerst. Wenn ich einen Inout-Parameter hinzufüge. Das Ergebnis wird anders sein. Wie auch immer, danke für deinen Punkt. Ich denke du hast Recht. Ich werde das spät verifizieren. – aviit

+0

@aviit Was meinst du? – luk2302

+0

Ich meine ich habe gerade erst mit Swift in Playground angefangen :). Ich habe noch nicht gelernt, in anderen zu programmieren. Vielen Dank! – aviit

Verwandte Themen