I. Les protocoles▲
En développement iOS , un protocole est un ensemble de méthodes et de propriétés qui encapsulent une unité fonctionnelle. Le protocole ne contient aucune implantation, il définit simplement les éléments requis. Toutes les classes qui se déclarent comme conformes à ce protocole doivent implanter les méthodes et les propriétés contenues dans le protocole. (NdT : cette notion de protocole est similaire à celle d'interface utilisée dans d'autres langages).
I-A. Déclarer un protocole▲
I-A-1. Objective-C▲
En Objective-C, les protocoles sont déclarés avec le mot clef « @protocol ». Ce qui suit est un exemple de déclaration de protocole contenant seulement une méthode.
@protocol
SampleProtocol <
NSObject
>
-
(
void
)someMethod;
@end
I-A-2. Swift▲
En Swift, la syntaxe est un peu différente, mais l'idée est la même.
protocol
SampleProtocol
{
func
someMethod
()
}
I-B. Se conformer au protocole▲
I-B-1. Objective-C▲
En Objective-C, vous ajoutez le nom du protocole entre crochets angulaires à côté de la déclaration de l'interface de la classe.
MyClass déclare qu'elle se conforme à « SampleProtocol ». Dans le fichier d'implantation, MyClass fournit une implantation pour la méthode « someMethod », car c'est requis par le protocole.
@interface
MyClass : NSObject
<
SampleProtocol>
@end
I-B-2. Swift▲
En Swift, le nom du protocole est ajouté à côté du nom de la classe parent, séparé par une virgule. S'il n'y a pas de classe parent, alors vous écrivez simplement un deux-points suivi du nom du protocole.
« MyClass » et « AnotherClass » se conforment au protocole « SampleProtocol ».
class
MyClass
:
SampleProtocol
{
// se conforme à SampleProtocol
func
someMethod
()
{
}
}
class
AnotherClass
:
SomeSuperClass
,
SampleProtocol
{
// une classe fille qui se conforme à SampleProtocol
func
someMethod
()
{
}
}
II. La délégation▲
La délégation fonctionne main dans la main avec les protocoles, car elle permet à une classe de spécifier une propriété déléguée qui se conforme à un protocole. Ensuite, une instance d'une seconde classe qui implante le protocole peut être assignée à cette propriété. Maintenant, la première classe peut communiquer avec la seconde au travers de la propriété déléguée en utilisant les méthodes et les propriétés définies par le protocole.
II-A. Déclarer une propriété déléguée▲
II-A-1. Objective-C▲
En Objective-C, déclarer une propriété déléguée implique d'utiliser le mot clef « id » comme montré ci-dessous.
@interface
FirstClass : NSObject
@property
(
nonatomic
, weak
) id
<
SampleProtocol>
delegate;
@end
II-A-2. Swift▲
En Swift, la déclaration d'une propriété déléguée est équivalente à la déclaration d'une autre propriété et vous spécifiez le nom du protocole comme type de propriété.
Vous remarquerez la syntaxe du point d'interrogation qui indique que c'est une propriété avec une valeur optionnelle (il peut ou non y avoir un objet qui lui est assigné).
class
FirstClass
{
var
delegate
:
SampleProtocol
?
}
II-B. Appeler une méthode déléguée.▲
II-B-1. Objective-C▲
En Objective-C, avant d'appeler une méthode déléguée, vous allez souvent voir un « if » vérifiant si un objet est assigné à la propriété déléguée.
if
(
self
.delegate)
[self
.delegate someMethod];
II-B-2. Swift▲
En Swift, vous allez pouvoir tirer avantage de la syntaxe du point d'interrogation (NdT : il permet d'accéder aux propriétés et méthodes d'une variable à valeur optionnelle). Si la propriété déléguée est vide, rien de ce qui suit le point d'interrogation ne sera exécuté.
delegate
?.
someMethod
()
III. Conclusion▲
Les protocoles et les délégations sont largement utilisés en Objective-C et ils continuent de l'être en Swift. Ça prend souvent un peu de temps pour que les débutants saisissent ces concepts, mais une fois assimilés, ils deviennent un outil puissant dans leur arsenal.
IV. Remerciements Developpez▲
Nous remercions, Chris Ching, de nous avoir aimablement autorisé à publier son article. Cet article est une traduction autorisée dont le texte original peut être trouvé sur codewithchris.com. Nous remercions aussi Sirus64 pour sa traduction, bredelet pour sa relecture technique ainsi que Milkoseck pour sa relecture orthographique.