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?

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.