¿Puede una categoría implementar un protocolo en el objetivo C?

88

Tengo una categoría en NSDate y sería conveniente si pudiera implementar un protocolo que creé anteriormente. es posible? ¿Cuál es la sintaxis correcta para esto?

cfischer
fuente

Respuestas:

144

Sí, eso es posible. La sintaxis es:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

Aquí está la documentación de Apple sobre el tema.

También es posible hacer esto usando una extensión de clase. Me gusta mucho esto para cumplir en privado con los protocolos de delegado. Al hacerlo, se oculta el detalle de implementación de ser un delegado de alguna clase de la interfaz pública y se elimina la dependencia del encabezado.

Nikolai Ruhe
fuente
Lástima que no haya una forma de mover la declaración del protocolo a la implementación de la categoría de clase.
adib
@adib Para eso están las extensiones de clase.
Nikolai Ruhe
@ bikram990 El documento se ha retirado y ahora está en la sección heredada. Actualicé el enlace.
Nikolai Ruhe
lamentablemente no podemos declarar variables de instancia en categorías, que puede ser que necesite para algunas implementaciones del protocolo delegado
yasirmturk
@yasirmturk Usted podría hacer que el uso de objc_setAssociatedObject :)
animaonline