Zauważyłem metody oznaczone jako opcjonalne w kilku protokołach zdefiniowanych w SDK iPhone'a, takich jak UIActionSheetDelegate
np. Protokół.
Jak mogę zdefiniować własny protokół i ustawić kilka metod jako opcjonalne?
iphone
objective-c
jpm
źródło
źródło
Jeśli metoda w protokole jest oznaczona jako opcjonalna, przed przystąpieniem do jej wywołania należy sprawdzić, czy obiekt implementuje tę metodę.
Na przykład widok wykresu kołowego może testować metodę tytułu segmentu w następujący sposób:
Metoda respondsToSelector: używa selektora, który po kompilacji odwołuje się do identyfikatora metody. Możesz podać poprawny identyfikator, używając dyrektywy @selector () i określając nazwę metody.
Jeśli źródło danych w tym przykładzie implementuje metodę, zostanie użyty tytuł; w przeciwnym razie tytuł pozostaje zerowy.
źródło
@protocol MyProtocol <NSObject>
Protokoły to zbiór reguł. Możemy stworzyć protokoły jak na poniższym przykładzie:
TestProtocols.h
Realizacja:
TestClass.h
TestClass.m
źródło
Użyj
@optional
słowa kluczowego przed deklaracją metody, aby uczynić ją opcjonalną. Proste!źródło
Protokoły działają tak samo jak klasy abstrakcyjne, więc słowo kluczowe @optional definiuje te metody, które są opcjonalne do implementacji.
Tak więc w kodzie niektóreMethod1, someMethod2 i someMethod4 są metodami wymaganymi (muszą być zaimplementowane). someMethod3 jest opcjonalna - jeśli nie zaimplementowaliśmy tej metody, kompilator nie będzie generował żadnych ostrzeżeń.
źródło