Una categoria può implementare un protocollo in Objective C?


88

Ho una categoria su NSDate e sarebbe conveniente se potesse implementare un protocollo che ho creato in precedenza. È possibile? qual è la sintassi corretta per questo?

Risposte:


144

Sì, è possibile. La sintassi è:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

Ecco la documentazione di Apple sull'argomento.

È anche possibile farlo utilizzando un'estensione di classe. Mi piace molto questo per conformarmi privatamente ai protocolli dei delegati. In questo modo si nascondono i dettagli di implementazione di essere un delegato di una classe dall'interfaccia pubblica e si rimuove la dipendenza dall'intestazione.


Peccato che non ci sia un modo per spostare la dichiarazione di protocollo nell'implementazione della categoria di classe.
adib

@adib Ecco a cosa servono le estensioni di classe.
Nikolai Ruhe

@ bikram990 Il documento è stato ritirato e ora si trova nella sezione legacy. Ho aggiornato il collegamento.
Nikolai Ruhe

sfortunatamente non possiamo dichiarare variabili di istanza in categorie, che potrebbero essere necessarie per alcune implementazioni di protocolli delegati
yasirmturk

@yasirmturk Potresti farlo usando objc_setAssociatedObject :)
animaonline
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.