Swift 101 – Swift rencontre le cadre du « Cocoa Touch

Même si Apple a fourni le nouveau langage de programmation Swift pour la création d’applications iOS, une chose reste inchangée : nous utilisons toujours les bibliothèques Cocoa Touch Framework pour intégrer des fonctionnalités iOS dans nos applications. Cependant, puisque le Cocoa Touch Framework est écrit en Objective-C, comment cela est-il réalisé ? Dans cet article, je vais vous montrer comment Swift accède au code Objective-C, et comment les API Cocoa Touch (interfaces de programmation d’applications) changent lorsque vous y accédez depuis Swift.

Maîtrisez votre iPhone en une minute par jour :

Inscrivez-vous à la newsletter « Tip of the Day » de iphonologie et nous vous enverrons chaque jour un conseil pour gagner du temps et tirer le meilleur parti de votre iPhone ou iPad.

Interopérabilité rapide et Objective-C

Apple a fait un excellent travail pour vous faciliter l’accès au code Objective-C depuis Swift, et l’accès au code Swift depuis Objective-C. En fait, un seul projet Xcode peut contenir à la fois des fichiers de code Objective-C et Swift. C’est une excellente nouvelle pour ceux d’entre nous qui ont de nombreuses applications et bibliothèques de code écrites en Objective-C.

Cette interopérabilité vous permet de migrer lentement vos applications vers Swift sans avoir à réécrire l’intégralité de l’application ou à attendre les versions Swift des bibliothèques tierces que vous utilisez.Elle vous permet également d’accéder à la puissance du Cocoa Touch Framework. Ceci est important lorsque vous travaillez dans un nouveau langage tel que Swift, qui prendra un certain temps pour arriver à maturité.

Importation de cadres tactiles pour le cacao

Dans un projet Swift, vous n’avez plus besoin d’ajouter les cadres Cocoa Touch à votre projet au moyen de l’éditeur de projet. Il vous suffit d’ajouter une déclaration d’importation en haut de votre fichier de code Swift, suivie du nom du cadre Cocoa Touch que vous souhaitez importer. Par exemple, le code suivant importe les frameworks Cocoa Touch Foundation et Media Player :

C’est aussi simple que cela !

Lorsque vous importez un framework Objective-C dans un projet ( Figure 1 ), les fichiers d’en-tête du framework sont compilés en modules Objective-C, qui sont ensuite importés sous forme d’API Swift.

Ce processus d’importation apporte des modifications aux classes, méthodes et fonctions afin qu’elles ressemblent aux classes Swift. Par exemple, les types d’argument de méthode et les valeurs de retour sont changés en types Swift.

Ainsi, par exemple, une méthode du Cocoa Touch Framework qui renvoie NSString en Objective-C renvoie plutôt le type Swift String . Comme autre exemple, les énumérations changent par rapport au style Objective-C montré ici :

MPMovieSourceTypeUnknownMPMovieSourceTypeFileMPMovieSourceTypeStreaming

Au nouveau style de dénombrement Swift :

MPMovieSourceType.UnknownMPMovieSourceType.FileMPMovieSourceType.Streaming

Une fois que vous avez importé un framework Objective-C dans votre projet, vous pouvez instancier des classes à partir du framework et accéder à leurs fonctionnalités en utilisant la syntaxe native de Swift.

Créer des objets à partir de classes Objectif C en Swift

Lorsque vous créez des objets à partir des classes du Cocoa Touch Framework dans Swift, vous pouvez voir que des modifications ont été apportées aux méthodes d’initialisation des classes lors de leur importation dans Swift.

A titre de comparaison, voici comment instancier un UIImageView en Objective-C en utilisant le initWithImage : initialisateur :

UIImageView *imageView = [[UIImageView alloc] initWithImage:myImage];

Le code équivalent dans Swift ressemble à ceci :

var myImageView:UIImageView = UIImageView(image : myImage)

Voici les différences importantes à noter :

  • Vous n’appelez pas alloc dans Swift parce que Swift s’occupe de cela pour vous.
  • Le préfixe initWith est supprimé du nom initWithImage ( init ou initWith est supprimé en fonction du nom de l’initialisateur).
  • Le reste du nom de l’initialisateur ( Image ) est placé entre parenthèses, son premier caractère est en minuscule et est utilisé comme nom du premier argument.
  • Tout argument supplémentaire de l’Objectif C est également converti en noms d’arguments et est inclus entre les parenthèses.

Lorsque vous créez une instance d’une classe dans Swift, vous n’avez pas besoin de spécifier le type de la variable car Swift est capable de déterminer, ou de déduire, le type pour vous :

var myImageView = UIImageView(image : myImage)

Créer des objets à partir des méthodes Objective-C Factory en Swift

De nombreuses classes Objective-C ont des méthodes d’usine qui combinent alloc et init en une seule étape et renvoient un nouvel objet (on les appelle méthodes d’usine parce qu’elles fabriquent, ou créent des objets). Par exemple, le code Objective-C suivant montre une méthode d’usine qui renvoie un objet UIImage :

UIImage *myImage = [UIImage imageNamed:@ "pause.png"];

Lorsque des méthodes d’usine sont importées dans Swift, elles sont converties en méthodes d’initialisation comme celle-ci :

var myImage = UIImage(named : "pause.png")

Notez que le paramètre imageNamed est changé en named dans Swift.

Accéder aux propriétés de l’Objectif C en Swift

Lorsque vous accédez à des propriétés en Objective-C, vous pouvez choisir entre deux syntaxes différentes. Vous pouvez soit envoyer un message en utilisant des crochets, soit utiliser la syntaxe du point (.) pour accéder à la propriété

Dans Swift, vous accédez toujours aux propriétés en utilisant la syntaxe des points. Par exemple :

controller.fullscreen = false

Lorsqu’une classe Objective-C est importée dans Swift, seules ses propriétés qui ont été déclarées à l’aide de la déclaration @property sont converties en propriétés dans Swift. Toute méthode déclarée comme getter implicite (une méthode qui n’accepte aucun paramètre et renvoie une valeur) est importée en tant que méthode.

Méthodes d’appel en Swift

Dans Swift, vous appelez également les méthodes utilisant la syntaxe des points. Par exemple, le code suivant appelle la méthode de pause sur un objet contrôleur.

controller.pause()

Lorsqu’on appelle une méthode qui ne comporte qu’un seul paramètre, il est typique que l’on passe simplement un argument comme celui-ci :

var suffixeFound = myString.hasPrefix("txt")

Si une méthode a plusieurs paramètres, les autres paramètres sont nommés et vous utilisez une syntaxe similaire à celle d’Objective-C pour passer les arguments. Par exemple, dans l’appel de méthode suivant, le premier argument n’a pas de nom, mais pour le second argument, vous spécifiez le nom suivi d’un deux-points ( animé : ) suivi de l’argument ( true ) :

tableView.deselectRowAtIndexPath(indexPath animé : true)

Appel des méthodes Objective-C en Swift

Lorsqu’une classe Objective-C est importée dans Swift, le nom de la méthode et les arguments sont modifiés pour s’adapter à la syntaxe de la méthode Swift.

Par exemple, l’appel de messages Objectif-C suivant :

[self performSegueWithIdentifier:@ "MySegue" sender:self];

On dirait que c’est le cas dans Swift :

self.performSegueWithIdentifier("MonSegue", expéditeur : self)

Voici les principaux points à noter :

  • Vous utilisez la syntaxe du point (.) pour appeler la méthode.
  • La première partie du sélecteur Objective-C ( performSegueWithIdentifier ) devient le nom de la méthode.
  • Le premier argument (« MySegue ») apparaît entre les parenthèses et n’a pas de nom.
  • Toutes les autres parties du sélecteur (par exemple, expéditeur : ) deviennent des noms d’arguments et sont incluses dans les parenthèses.

Conclusion

L’interopérabilité qu’Apple a prévue pour Swift permet aux développeurs Objective-C de passer beaucoup plus facilement à ce nouveau langage. Même si la syntaxe a un peu changé, elle est toujours reconnaissable, et la complétion de code de Xcode aide considérablement lorsque vous passez à Swift !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *