Sök…


Grundläggande protokolldefinition

Definiera ett nytt protokoll:

@protocol NewProtocol

- (void)protocolMethod:(id)argument;

- (id)anotherMethod;

@end

Valfria och erforderliga metoder

Som standard krävs alla metoder som deklareras i ett protokoll. Detta innebär att varje klass som överensstämmer med detta protokoll måste implementera dessa metoder.

Det är också möjligt att förklara valfria metoder. Denna metod kan endast implementeras vid behov.

Du markerar valfria metoder med @optional .

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

I detta fall är endast en anotherMethod markerad som valfri; metoderna utan @optional antas vara nödvändiga.

@optional direktivet gäller för metoder som följer, fram till slutet av protokolldefinitionen eller tills ett annat direktiv hittas.

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

Detta sista exempel definierar ett protokoll med två valfria metoder och två obligatoriska metoder.

I enlighet med protokoll

Följande syntax indikerar att en klass antar ett protokoll med vinkelparenteser.

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

Detta innebär att alla instanser av NewClass kommer att svara på metoder som deklareras i dess gränssnitt men också att det kommer att ge en implementering av alla nödvändiga metoder för NewProtocol .

Det är också möjligt för en klass att anpassa sig till flera protokoll genom att separera dem med komma.

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

Liksom vid överensstämmelse med ett enda protokoll måste klassen implementera varje nödvändig metod i varje protokoll, och varje valfri metod du väljer att implementera.

Framåtförklaringar

Det är möjligt att förklara protokollnamn utan metoder:

@protocol Person;

använd den din kod (klassdefinition, etc):

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

och definiera senare protokollets metod någonstans i din kod:

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

Det är användbart när du inte behöver veta protokollinformation förrän du importerar den filen med protokolldefinition. Så din klasshuvudfil förblir klar och innehåller bara detaljer om klassen.

Kontrollera existerande implementering av valfri metod

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

Kontrollera överensstämmelse med protokoll

Returnerar en boolean som anger om klassen överensstämmer med protokollet:

[MyClass conformsToProtocol:@protocol(MyProtocol) ];



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow