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?

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.