Wie mache ich eine grundlegende Implementierung von Delegation in Swift?

8

Ich bemühe mich, Delegationsaufgaben in den Griff zu bekommen und streiche es auf eine grundlegende Implementierung. Ich bin dazu gekommen, aber die Delegiertenfunktion wird nie aufgerufen. Könnte jemand etwas Licht werfen?

%Vor%     
Paul Herron 13.02.2016, 23:38
quelle

7 Antworten

7
%Vor%

Punkt ist bevor Sie callDelegate() aufrufen, dem Sie delegate zuweisen müssen. Um zu überprüfen, ob Ihre Delegierung funktioniert, können Sie DelegatorClass mit dem Delegaten initialisieren.

%Vor%     
Warif Akhand Rishi 18.02.2016 05:10
quelle
4
%Vor%

Es ist nichts falsch mit Ihrem Ansatz, verwenden Sie es einfach richtig. Der Punkt ist die Delegatvariable für eine Instanz des Typs T, die dem Protokoll MyDelegate entspricht. In Ihrem Fall ist dies die DelegateClass-Instanz. Im Allgemeinen könnte T fast alles sein, das dem MyDelegate-Protokoll entspricht.

%Vor%     
user3441734 18.02.2016 06:33
quelle
4

Mit Ihrem Code können Sie auf diese Weise delegate ordnungsgemäß verwenden. Wenn Sie callDelegate() aufrufen, wird der Verweis auf DelegateClass verwendet und delegatedFunction()

ausgeführt %Vor% %Vor% %Vor%

Weitere Informationen finden Sie in den Dokumentationen zu Apple-Protokollen. Ссылка

    
UlyssesR 13.02.2016 23:47
quelle
3

Getestet und an einem Beispielspielplatz gearbeitet.

%Vor%

Um es zu testen, fügen Sie die folgenden Zeilen hinzu.

%Vor%

Um zu erklären,

Wenn Sie die Instanz von DelegateClass c erstellen und initialisiert wird, wird die Methode init ausgeführt. Die DelegatorClass-Instanz my_class member delegate enthält jetzt einen Verweis auf self , was die DelegateClass ist.

Wenn nun die Methode callDelegate() ausgeführt wird, wird, da die optionale Variable delegate jetzt einen Verweis auf die DelegateClass-Instanz enthält, im Grunde die Ausführung der Methode delegatedFunction(a: String) verlangt. Und deshalb wird die Zeichenkette a gedruckt.

Beachten Sie auch, dass ich my_class.delegate = self in init() setzen musste, weil Sie nur Instanzeigenschaftsdeklarationen außerhalb von Methoden in einer Klasse haben können. Alle Funktionalität sollte in Methoden gehen.

Ich hoffe, dass die Erklärung klar war! :)

    
mohonish 18.02.2016 05:43
quelle
2

Sie hatten es fast schon, Sie haben einfach vergessen, class DelegateClass der Eigenschaft class DelegatorClass delegate zuzuordnen, mit ein paar anderen Optimierungen.

Im Grunde sagen Sie, dass class DelegateClass der protocol MyDelegate entspricht, was bedeutet, dass delegatedFunction(a:String) implementiert werden muss. Bei class DelegatorClass erwartet die Eigenschaft delegate ein Objekt mit dem Typ protocol MyDelegate , sodass sie die Protokollfunktion dagegen aufrufen kann. Daher ist es wichtig, self der Eigenschaft delegate zuzuweisen in DelegateClass

%Vor%     
DerekH 23.02.2016 23:09
quelle
1

Eine Instanz von DelegateClass muss sich selbst als Delegat einer Instanz von DelegatorClass

festlegen

Sie hätten also etwas wie:

%Vor%     
Paulw11 13.02.2016 23:44
quelle
-1
%Vor%     
cnu 18.02.2016 06:14
quelle

Tags und Links