Czy kategoria może implementować protokół w celu C?

88

Mam kategorię na NSDate i byłoby wygodnie, gdyby mogła zaimplementować protokół, który wcześniej utworzyłem. czy to możliwe? jaka jest poprawna składnia tego?

cfischer
źródło

Odpowiedzi:

144

Tak, to możliwe. Składnia jest następująca:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

Oto dokumentacja firmy Apple na ten temat.

Można to również zrobić za pomocą rozszerzenia klasy. Bardzo podoba mi się prywatna zgodność z protokołami delegatów. Spowoduje to ukrycie szczegółów implementacji bycia delegatem jakiejś klasy z interfejsu publicznego i usunięcie zależności z nagłówka.

Nikolai Ruhe
źródło
Szkoda, że ​​nie ma sposobu na przeniesienie deklaracji protokołu do implementacji kategorii klasy.
adib
@adib Do tego służą rozszerzenia klas.
Nikolai Ruhe
@ bikram990 Dokument został wycofany i znajduje się teraz w sekcji starszej wersji. Zaktualizowałem link.
Nikolai Ruhe
niestety nie możemy zadeklarować zmiennych instancji w kategoriach, które mogą być potrzebne do niektórych implementacji protokołu delegatów
yasirmturk
@yasirmturk Możesz to zrobić używając objc_setAssociatedObject :)
animaonline