Uma categoria pode implementar um protocolo no Objective C?

88

Tenho uma categoria em NSDate e seria conveniente se pudesse implementar um protocolo que criei anteriormente. Isso é possível? qual é a sintaxe correta para isso?

cfischer
fonte

Respostas:

144

Sim, isso é possível. A sintaxe é:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

Aqui está a documentação da Apple sobre o assunto.

Também é possível fazer isso usando uma extensão de classe. Gosto muito disso para me conformar em particular com os protocolos de delegação. Fazer isso oculta os detalhes de implementação de ser algum delegado de alguma classe da interface pública e remove a dependência do cabeçalho.

Nikolai Ruhe
fonte
Pena que não haja uma maneira de mover a declaração do protocolo para a implementação da categoria da classe.
adib
@adib É para isso que existem extensões de classe.
Nikolai Ruhe
@ bikram990 O documento foi retirado e agora está na seção de legado. Eu atualizei o link.
Nikolai Ruhe
infelizmente, não podemos declarar variáveis ​​de instância em categorias, que podemos precisar para algumas implementações de protocolo delegado
yasirmturk
@yasirmturk Você poderia fazer isso usando objc_setAssociatedObject :)
animaonline