Apprendre Swift à partir d'Objective-C

Protocoles et Délégations

Chris Ching

Traducteur

Pierre-François Léon

Ce tutoriel est la suite des parties deux et trois où nous avons comparé Swift et Objective-C sur différentes opérations impliquant des variables, des classes, des méthodes et des propriétés.

Ce tutoriel est plus adapté pour les personnes qui connaissent déjà Objective-C (au moins les bases) et qui veulent voir les équivalences dans Swift.

Retrouvez toute la série "Apprendre Swift à partir d'Objective C"

Les commentaires et les suggestions d'amélioration sont les bienvenus, alors, après votre lecture, n'hésitez pas. Commentez .

- Titre : Apprendre Swift à partir d'Objective-C

- Auteur : Chris Ching

- Traducteur : Pierre-François Léon

- Parution : 30 août 2014

- Licence : Copyright ® 2014 Chris Ching. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Les protocoles

- I-A. Déclarer un protocole

- I-A-1. Objective-C

- I-A-2. Swift

- I-B. Se conformer au protocole

- I-B-1. Objective-C

- I-B-2. Swift

- II. La délégation

- II-A. Déclarer une propriété déléguée

- II-A-1. Objective-C

- II-A-2. Swift

- II-B. Appeler une méthode déléguée.

- II-B-1. Objective-C

- II-B-2. Swift

- III. Conclusion

- IV. Remerciements Developpez

- V. Apprendre Swift à partir d'Objective-C

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.

V - Apprendre Swift à partir d'Objective-C

Retrouvez toute la série Apprendre Swift à partir d'Objective C