Kann eine Kategorie ein Protokoll in Ziel C implementieren?

88

Ich habe eine Kategorie in NSDate und es wäre praktisch, wenn ein zuvor erstelltes Protokoll implementiert werden könnte. Ist das möglich? Was ist die richtige Syntax dafür?

cfischer
quelle

Antworten:

144

Ja das ist möglich Die Syntax lautet:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

Hier ist Apples Dokumentation zu diesem Thema.

Dies ist auch mit einer Klassenerweiterung möglich. Ich mag es sehr, wenn ich mich privat an delegierte Protokolle anpasse. Dadurch wird das Implementierungsdetail eines Delegaten einer Klasse vor der öffentlichen Schnittstelle ausgeblendet und die Abhängigkeit aus dem Header entfernt.

Nikolai Ruhe
quelle
Schade, dass es keine Möglichkeit gibt, die Protokolldeklaration in die Implementierung der Klassenkategorie zu verschieben.
Adib
@adib Dafür gibt es Klassenerweiterungen.
Nikolai Ruhe
@ bikram990 Das Dokument wurde zurückgezogen und befindet sich jetzt im Legacy-Bereich. Ich habe den Link aktualisiert.
Nikolai Ruhe
Leider können wir keine Instanzvariablen in Kategorien deklarieren, die wir möglicherweise für einige Delegate-Protokoll-Implementierungen benötigen
yasirmturk
@yasirmturk Sie könnten das mit objc_setAssociatedObject tun :)
animaonline