Ricerca…


Definizione del protocollo di base

Definire un nuovo protocollo:

@protocol NewProtocol

- (void)protocolMethod:(id)argument;

- (id)anotherMethod;

@end

Metodi opzionali e richiesti

Per impostazione predefinita, sono richiesti tutti i metodi dichiarati in un protocollo. Ciò significa che qualsiasi classe conforme a questo protocollo deve implementare tali metodi.

È anche possibile dichiarare metodi opzionali . Questo metodo può essere implementato solo se necessario.

Contrassegni i metodi opzionali con la direttiva @optional .

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

In questo caso, solo anotherMethod è contrassegnato come facoltativo; si presume che i metodi senza la direttiva @optional siano obbligatori.

La direttiva @optional applica ai metodi che seguono, fino alla fine della definizione del protocollo o fino a quando non viene trovata un'altra direttiva.

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

Questo ultimo esempio definisce un protocollo con due metodi opzionali e due metodi richiesti.

Conformandosi ai protocolli

La seguente sintassi indica che una classe adotta un protocollo, usando parentesi angolari.

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

Ciò significa che qualsiasi istanza di NewClass risponderà ai metodi dichiarati nella sua interfaccia ma fornirà anche un'implementazione per tutti i metodi richiesti di NewProtocol .

È anche possibile che una classe si conformi a più protocolli, separandoli con una virgola.

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

Come quando si conforma ad un singolo protocollo, la classe deve implementare ogni metodo richiesto da ciascun protocollo e ogni metodo opzionale che si sceglie di implementare.

Dichiarazioni avanti

È possibile dichiarare il nome del protocollo senza metodi:

@protocol Person;

usa il tuo codice (definizione della classe, ecc.):

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

e in seguito definire il metodo del protocollo da qualche parte nel codice:

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

È utile quando non è necessario conoscere i dettagli dei protocolli finché non si importa quel file con la definizione del protocollo. Pertanto, il file di intestazione della classe rimane chiaro e contiene solo i dettagli della classe.

Verifica dell'esistenza di implementazioni del metodo opzionali

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

Verifica il protocollo conforme

Restituisce un booleano che indica se la classe è conforme al protocollo:

[MyClass conformsToProtocol:@protocol(MyProtocol) ];



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow