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.