Apprendre Swift à partir d'Objective-C

Protocoles et Délégations

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 Donner une note à l'article (5).

Article lu   fois.

Les deux auteur et traducteur

Traducteur : Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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.

 
Sélectionnez
@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.

 
Sélectionnez
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.

 
Sélectionnez
@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 ».

 
Sélectionnez
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.

 
Sélectionnez
@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é).

 
Sélectionnez
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.

 
Sélectionnez
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é.

 
Sélectionnez
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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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.