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?

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.