Objective-C Language
protocollen
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)
];