2012-03-27 12 views
0

Dies ist zweimal oder dreimal in einem Projekt passiert. Die Anforderung bestand darin, eine bestimmte Funktionalität in einem viewController zu haben, und dann wurde diese Funktion in einen anderen viewController verschoben.Wie erreicht man ein bestimmtes Verhalten in Ziel C?

Ich machte ein Protokoll, das Deklaration für diese Funktionen hatte, aber das hilft nicht viel. Jedes Mal, wenn sich die Anforderung ändert, muss ich alle Methodenimplementierungen von einer Datei in eine andere kopieren und einfügen und dann das Protokoll von einer Header-Datei zu einer anderen deklarieren.

Gibt es einen Weg, dass ich Implementierung an einem Ort haben kann und dann einfach irgendwie mit einer Klasse mischen und dann leicht entfernen Sie es zu einer anderen Klasse wie Rubin Mixins hinzufügen oder für diese Angelegenheit Eigenschaften in Scala?

+2

mögliches Duplikat von [Unterstützt Objective-C Traits/Mixins?] (Http://stackoverflow.com/questions/5601126/does-objective-c-support-traits-mixins) –

Antwort

1

Sie benötigen möglicherweise keinen Ruby Mixin für Ihren speziellen Fall. Sie könnten eine neue Klasse erstellen, die von UIViewController erbt, und diese als Basisklasse für Ihre View-Controller-Klassen verwenden, die dieses Protokoll benötigen.

Wenn Sie möchten, dass dieses Protokoll in allen View-Controllern verfügbar ist, können Sie die Basisklasse mit category erweitern.

Wenn Sie die gleiche Implementierung des Protokolls für Klassen benötigen, die nicht von UIViewController abstammen, dann brauchen Sie wirklich etwas wie ein Ruby Mixin. In diesem Fall finden Sie unter this question Informationen zur Verwendung der Nachrichtenweiterleitung. Und this question hat einige verwandte Informationen in den Antworten.

Die geeignete Auswahl hängt von der Menge der Klassen ab, die Ihre Implementierung benötigen. Wenn es in einigen, aber nicht in allen UIViewController-Klassen benötigt wird, verwenden Sie eine Unterklasse. Wenn es in allen UIViewController-Klassen benötigt wird, aber keine anderen, verwenden Sie eine Kategorie. Andernfalls verwenden Sie die Nachrichtenweiterleitung.

Verwandte Themen