2016-08-10 3 views
5

Ich bin sehr neu zu Swift und Programmierung im Allgemeinen, ein bisschen Fortran 77 zurück, und in letzter Zeit einige einfache Programmierung von Mikrocontrollern. Ich arbeite durch die Grundlagen und alles war gut, bis ich auf etwas gestoßen bin, mit dem ich mich nicht ganz fertig machen kann - Delegierte. Alle Online-Posts verstehen das Konzept nicht ganz, zumindest für mich. Um mir also etwas zu geben, auf das ich zurückgreifen kann, habe ich eine grundlegende Vorlage eingerichtet, die unten auf dem Spielplatz gezeigt wird. Wenn ich den Code unten ausführe, funktioniert es und druckt "etwas getan" zum Terminal, aber wenn ich das Protokoll ein "Klassen" Protokoll dh "Protokoll SomeDelegate: Klasse {" mache und den "var Delegierten" einen "schwachen var Delegierten" mache Wie in verschiedenen Beiträgen empfohlen, funktioniert es nicht - was mache ich falsch?Einfache schnelle Delegierte in swift Spielplatz

Antwort

3

Es wird nicht gedruckt, weil der Delegat gleich nach dem Festlegen nicht mehr aktiv ist. Der Grund dafür ist einfach: keine Instanz besitzt es (die Referenzzahl ist Null). Niemand besitzt delegate, weil Sie es als eine schwache Eigenschaft von OtherClass deklariert haben. Versuchen Sie, eine Eigentümerschaft, z.

var myVar = OtherClass() 
let viewController = MyViewController() 
myVar.delegate = viewController 

Obwohl Delegierte schwach ist, wird es nun Something done wieder drucken.

Delegierte als schwach zu deklarieren macht Sinn, weil es zirkuläre Verweise verhindert, die dazu führen, dass delegate niemals im Speicher freigegeben wird - das ist eine ganz andere Geschichte - überprüfen Sie, wie Referenzzählung funktioniert, dann werden Sie verstehen, warum dies eine gute Übung ist.