Zoeken…


Basic Protocol Definition

Een nieuw protocol definiëren:

@protocol NewProtocol

- (void)protocolMethod:(id)argument;

- (id)anotherMethod;

@end

Optionele en vereiste methoden

Standaard zijn alle in een protocol aangegeven methoden vereist. Dit betekent dat elke klasse die aan dit protocol voldoet, deze methoden moet implementeren.

Het is ook mogelijk om optionele methoden aan te geven. Deze methode kan alleen worden geïmplementeerd indien nodig.

U markeert optionele methoden met de @optional richtlijn.

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

In dit geval is alleen een andere anotherMethod gemarkeerd als optioneel; aangenomen wordt dat de methoden zonder de @optional richtlijn vereist zijn.

De @optional richtlijn is van toepassing op methoden die volgen tot het einde van de protocoldefinitie of totdat een andere richtlijn wordt gevonden.

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

Dit laatste voorbeeld definieert een protocol met twee optionele methoden en twee vereiste methoden.

Conform protocollen

De volgende syntaxis geeft aan dat een klasse een protocol hanteert met punthaken.

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

Dit betekent dat elke instantie van NewClass zal reageren op methoden die in de interface zijn aangegeven, maar ook een implementatie biedt voor alle vereiste methoden van NewProtocol .

Het is ook mogelijk dat een klasse voldoet aan meerdere protocollen, door ze te scheiden met komma.

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

Zoals bij het voldoen aan een enkel protocol, moet de klasse elke vereiste methode van elk protocol implementeren, en elke optionele methode die u kiest te implementeren.

Toekomstige verklaringen

Het is mogelijk om de protocolnaam zonder methoden te declareren:

@protocol Person;

gebruik het uw code (klassedefinitie, enz.):

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

en definieer later de methode van het protocol ergens in uw code:

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

Dit is handig als u geen protocollen hoeft te weten totdat u dat bestand met de protocoldefinitie importeert. Het koptekstbestand van uw klas blijft dus leeg en bevat alleen details van de klas.

Controle van het bestaan van optionele implementaties van methoden

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

Controleer conform protocol

Retourneert een Boolean die aangeeft of de klasse voldoet aan het protocol:

[MyClass conformsToProtocol:@protocol(MyProtocol) ];



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow