Nach vielen Recherchen bin ich immer noch ein wenig verwirrt darüber, wie Delegierte zu verwenden und zu implementieren. Ich habe versucht, mein eigenes, vereinfachtes Beispiel zu schreiben, um mein Verständnis zu unterstützen - aber es funktioniert nicht - was bedeutet, dass ich etwas verloren sein muss.Versuchen, die Implementierung von Delegaten mit Protokollen in Swift zu verstehen
//the underlying protocol
protocol myRules {
func sayName(name: String);
}
//the delegate that explains the protocols job
class myRulesDelegate: myRules {
func sayName(name: String){
print(name);
}
}
//the delegator that wants to use the delegate
class Person{
//the delegator telling which delegate to use
weak var delegate: myRulesDelegate!;
var myName: String!;
init(name: String){
self.myName = name;
}
func useDels(){
//using the delegate (this causes error)
delegate?.sayName(myName);
}
}
var obj = Person(name: "Tom");
obj.useDels();
Ich habe gelesen und beobachtete so viele Tutorials, aber immer noch kämpfen. Ich bekomme keinen Fehler mehr (Prost Jungs). Aber immer noch keine Ausgabe von sayName.
was zeigt, ich muss missverstehen, wie Delegierten Muster arbeiten. Ich würde wirklich eine korrigierte Version des Codes schätzen, mit einer einfachen Erklärung, warum es funktioniert und warum es hilfreich ist.
Ich hoffe, dass dies auch anderen hilft. Prost.
Sie haben vergessen zu Weisen Sie den Delegierten vor der Verwendung zu. Wie 'obj.delegate = myRulesDelegate()'. Und da es implizit optional ausgepackt ist, stürzt es ab. Siehe Paulw11's Antwort. – Moritz