Ich habe Methoden festgestellt, die in mehreren im iPhone SDK definierten Protokollen als optional markiert sind, z. B. im UIActionSheetDelegate
Protokoll.
Wie kann ich ein eigenes Protokoll definieren und einige der Methoden als optional festlegen?
iphone
objective-c
jpm
quelle
quelle
Wenn eine Methode in einem Protokoll als optional markiert ist, müssen Sie überprüfen, ob ein Objekt diese Methode implementiert, bevor Sie versuchen, sie aufzurufen.
In der Kreisdiagrammansicht wird beispielsweise die Segmenttitelmethode wie folgt getestet:
Die Methode respondsToSelector: verwendet einen Selektor, der nach der Kompilierung auf den Bezeichner einer Methode verweist. Sie können den richtigen Bezeichner angeben, indem Sie die Direktive @selector () verwenden und den Namen der Methode angeben.
Wenn die Datenquelle in diesem Beispiel die Methode implementiert, wird der Titel verwendet. Andernfalls bleibt der Titel gleich Null.
quelle
@protocol MyProtocol <NSObject>
Protokolle sind Regeln. Wir können Protokolle wie im folgenden Beispiel erstellen:
TestProtocols.h
Implementierung:
TestClass.h
TestClass.m
quelle
Verwenden Sie das
@optional
Schlüsselwort vor Ihrer Methodendeklaration, um es optional zu machen. So einfach ist das!quelle
Protokolle verhalten sich genauso wie abstrakte Klassen, daher definiert das Schlüsselwort @optional die Methoden, die für die Implementierung optional sind.
Im Code sind also someMethod1, someMethod2 und someMethod4 erforderliche Methoden (müssen implementiert werden). someMethod3 ist optional. Wenn wir diese Methode nicht implementiert haben, gibt der Compiler keine Warnungen aus.
quelle