Definieren von Kategorien für Protokolle in Objective-C?

In Objective-C kann ich vorhandenen Klassen Methoden mit einer Kategorie hinzufügen, z.

@interface NSString (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end

Ist es auch möglich, dies mit Protokollen zu tun, d. H. Wenn es ein NSString-Protokoll gab, so etwas wie:

@interface <NSString> (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end

Ich möchte dies tun, da ich mehrere Erweiterungen für NSObject (die Klasse) habe, die nur öffentliche NSObject-Methoden verwenden, und ich möchte, dass diese Erweiterungen auch mit Objekten arbeiten, die das Protokoll implementieren.

Um ein weiteres Beispiel zu geben, was ist, wenn ich eine Methode logDescription schreiben möchte, die die Beschreibung eines Objekts in das Protokoll druckt:

- (void) logDescription {
    NSLog(@"%@", [self description]);
}

Ich kann diese Methode natürlich zu NSObject hinzufügen, aber es gibt andere Klassen, die nicht von NSObject erben, wo ich diese Methode auch haben möchte, z. NSProxy. Da die Methode nur öffentliche Mitglieder des Protokolls verwendet, ist es am besten, sie dem Protokoll hinzuzufügen.

Edit: Java 8 hat dies nun mit "virtuellen Erweiterungsmethoden" in Interfaces:http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v4.pdf. Genau das möchte ich in Objective-C tun. Ich habe nicht gesehen, dass diese Frage so viel Aufmerksamkeit erregt hat ...

Grüße, Jochen

Antworten auf die Frage(7)

Ihre Antwort auf die Frage