Suche…


Basisprotokolldefinition

Definieren eines neuen Protokolls:

@protocol NewProtocol

- (void)protocolMethod:(id)argument;

- (id)anotherMethod;

@end

Optionale und erforderliche Methoden

Standardmäßig sind alle in einem Protokoll deklarierten Methoden erforderlich. Das bedeutet, dass jede Klasse, die diesem Protokoll entspricht, diese Methoden implementieren muss.

Es ist auch möglich, optionale Methoden zu deklarieren. Diese Methode kann nur bei Bedarf implementiert werden.

Sie markieren optionale Methoden mit der Direktive @optional .

@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
@end

In diesem Fall wird nur eine anotherMethod als optional markiert. @optional wird angenommen, dass die Methoden ohne die Direktive @optional erforderlich sind.

Die Direktive @optional gilt für die folgenden Methoden bis zum Ende der Protokolldefinition oder bis eine andere Direktive gefunden wird.

@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
- (void)andAnotherMethod:(id)argument;
@required
- (void)lastProtocolMethod;
@end

Das letzte Beispiel definiert ein Protokoll mit zwei optionalen Methoden und zwei erforderlichen Methoden.

Übereinstimmung mit Protokollen

Die folgende Syntax gibt an, dass eine Klasse ein Protokoll mit spitzen Klammern verwendet.

@interface NewClass : NSObject <NewProtocol>
...
@end

Dies bedeutet, dass jede Instanz von NewClass auf in ihrer Schnittstelle deklarierte Methoden reagiert, aber auch eine Implementierung für alle erforderlichen Methoden von NewProtocol .

Es ist auch möglich, dass eine Klasse mehreren Protokollen entspricht, indem sie durch Kommas getrennt wird.

@interface NewClass : NSObject <NewProtocol, AnotherProtocol, MyProtocol>
...
@end

Wie bei der Konformität mit einem einzelnen Protokoll muss die Klasse jede erforderliche Methode jedes Protokolls und jede optionale Methode implementieren, die Sie zur Implementierung auswählen.

Erklärungen weiterleiten

Es ist möglich, Protokollnamen ohne Methoden zu deklarieren:

@protocol Person;

Verwenden Sie Ihren Code (Klassendefinition usw.):

@interface World : NSObject
@property (strong, nonatomic) NSArray<id<some>> *employees;
@end

und definieren Sie später die Protokollmethode irgendwo in Ihrem Code:

@protocol Person
- (NSString *)gender;
- (NSString *)name;
@end

Dies ist nützlich, wenn Sie die Protokolldetails erst kennen müssen, wenn Sie diese Datei mit der Protokolldefinition importieren. Daher bleibt Ihre Klassenheaderdatei frei und enthält nur Details zur Klasse.

Vorhandensein optionaler Methodenimplementierungen prüfen

if ([object respondsToSelector:@selector(someOptionalMethodInProtocol:)])
{
    [object someOptionalMethodInProtocol:argument];
}

Überprüfen Sie das Protokoll

Gibt einen booleschen Wert zurück, der angibt, ob die Klasse dem Protokoll entspricht:

[MyClass conformsToProtocol:@protocol(MyProtocol) ];



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow