Salut les petits fous ! Aujourd’hui nous allons enfin apprendre à nous servir de l’immense API d’Apple en Swift. Une API, pour Application Programming Interface ou interface de programmation en français (Wikipedia), est un ensemble de fonctions et de classes permettant de “piloter” un autre programme. Il s’agit des fonctions crées par Apple incluses dans leurs systèmes d’exploitations et nous permettant de nous servir d’outils comme le cloud, la camera, le multi-touch, etc… Nous allons donc découvrir le fonctionnement général de ces outils et comment les comprendre.
Pomme d’API
Alors soyez certains qu’aujourd’hui nous n’aborderons pas la totalité, pas même 1% de l’API proposée par Apple même sur un seul OS car celles-ci sont immenses, pleines d’options et de fonctions en tout genre permettant une multitude de possibilités. Pour afficher la documentation détaillant toute l’API, vous pouvez appuyer simultanément sur les touches ⇧ + ⌘ + 0 ou en allant dans le menu Window → Developer Documentation. Vous devriez avoir une fenêtre qui ressemble à ça :
Se présente alors à nous un explorateur de documentation avec une barre de recherche et une documentation classifiée pour 4 des méthodes utilisées pour utiliser les APIs :
- Le Swift
- L’objective-c
- les requêtes REST
- Le JavaScript
Et bien sûr nous n’aborderons ici que le Swift quoique les autres ne soient pas inintéressants.
Prenons une classe
que nous connaissons bien et que nous avons l’habitude de manipuler : les chaines de caractères.
On tape “String” dans la barre de recherche et on obtient plusieurs résultats avec en premier et en gros celui qui nous intéresse. Elle est contenue dans la Swift Standard Library ce qui veut dire qu’elle fait partie de la structure du langage. Nous avons donc droit à son fonctionnement détaillé pour en tirer le meilleur parti. Et quand je dis détaillé je veux parler de ça :
En réalité, les String ne sont pas des classes mais des structures dont on a pas encore parlé mais auxquelles nous reviendrons bien assez tôt
On a donc de quoi faire ! Il est possible de récupérer cette masse d’information directement sur le site d’Apple Developer qui possède le même contenu, mis en page légèrement différemment.
On retrouve sur la page String de la documentation moult informations concernant cette structure, et la déclarations de toutes ses variables et fonctions publiques, qui permettent d’interagir avec. Bref c’est ici que nous avons son manuel d’utilisation. Dans ce blog je ne pourrai jamais couvrir l’intégralité du contenu de ces manuels, il est donc primordial de les explorer et de s’y référer lorsque l’on code.
Le menu sur la droite nous détaille deux infos importantes : le SDK (Wikipedia) qui est basiquement la version d’Xcode nécessaire pour compiler la classe mais qui peut aussi être une version minimale (ou maximale) d’un système d’exploitation, et le framework qui est la libraire qu’il est nécessaire d’importer pour la faire fonctionner. Ici il s’agit de la Swift Standard Library qui n’est autre que le langage de programmation en lui-même.
Si l’on va voir la classe UIViewController, on voit qu’elle est incluse dans le framework UIKit qu’il faudra donc importer dès que l’on souhaiterai s’en servir dans les premières lignes du fichier de cette façon :
1 2 3 | import UIKit // Reste du code |
Si l’on descend un peu sur la page, on trouvera après les explications du fonctionnement de la classe la liste des fonctions et variables appartenant à classe et avec lesquels nous pouvons interagir. Nous y retrouvons leur déclaration simple c’est à dire les paramètres que le fonctions prendront en entrée, le type de variable qu’elles retournerons, et une légère description de leur utilité.
L’héritage
Toujours sur UIViewController, si l’on descend encore jusqu’à la rubrique “Relationships” on trouvera la classe dont elle hérite (cf : l’héritage des classes), ainsi que les protocoles auxquels elle se conforme :
Equatable
Hashable
NSCoding
NSExtensionRequestHandling
UIAppearanceContainer
UIContentContainer
UIFocusEnvironment
UIPasteConfigurationSupporting
UIStateRestoring
UITraitEnvironment
UIUserActivityRestoring
Cela signifie que la classe UIViewController hérite de la classe UIResponder (héritage unique), mais se conforme à tous les protocoles listés après. Nous n’avons pas encore vu le fonctionnement des protocoles mais ce sera très bientôt au programme, pour l’instant contentons nous de savoir qu’ils agissent comme une classe, mais uniquement au niveau de leur héritage. Son clique sur l’un d’entre eux, par exemple Hashable, on y retrouve le même type de documentation et on voit que le protocole contient lui aussi des fonctions et variables, qui seront donc accessibles depuis la classe qui en hérite : UIViewController.
Je sait que cela va à l’encontre de l’héritage unique sur lequel j’institue particulièrement, mais en réalité notre classe ici n’hérite que d’une seule autre : UIResponder, mais se conforme à de multiples autres protocoles. L’héritage de la classe UIViewController est donc bien unique.
S’en servir dans Xcode
Bon on a vu comment la documentation était construite, mais vu la quantité d’information qu’elle contient il semble beaucoup trop long de devoir naviguer à travers afin d’y découvrir les fonctions dont nous allons avoir besoin. Par chance, les gens qui se sont occupé de rédiger et d’imaginer tout cela travaillent en étroite collaboration avec ceux qui créent Xcode (ca semble logique !) alors notre IDE d’amour nous propose un moyen un peu plus rapide pour lister ces informations. Pour le découvrir, nous allons ouvrir un playground iOS et faire quelques essais.
1 2 3 | import UIKit var str = "Hello, playground" |
La variable str est de type String. Pour savoir ce que l’on peut en faire, il va falloir se référer à la documentation, ou bien simplement écrire la variable suivie d’un point :
On retrouve ici la liste de tout ce que l’on peut appeler depuis ce point, avec une présentation simplifiée. Sur l’exemple, la fonction append(c: Character)
est sélectionnée. Sur la gauche en gris on voit le type de variable qu’elle retournera (ici Void, c’est à dire rien) et en bas une courte description : “Appends the given character to the string”. On comprend donc rapidement à quoi sert la fonction, et comment elle fonctionne, et c’est la même chose pour les autres, ou pour les variables qu’elle peut contenir.
Le type de retour est inscrit sur la colonne de gauche afin de pouvoir parcourir les fonctions selon le type de variable que l’on cherche en sortie, les fonctions et variables sont mélangées et triées par ordre alphabétique mais il reste possible de les distinguer grâce à l’icône tout gauche indiquant “M” pour une fonction (méthode) et “V” pour une variable. Si l’on descend un peu on s’aperçoit que l’ordre alphabétique semble repartir de A à un certain endroit. C’est un moyen de séparer les fonctions propres à la structure String, des fonctions liés aux protocoles dont elle hérite : en premier celles de la structure, et à la suite celles de ses protocoles. En appuyant simplement sur entrée, le code s’écrit tout seul, il ne nous reste plus qu’a le compléter.
C’est quand même un peu plus pratique à utiliser que de naviguer dans l’immense documentation, là on a un affichage simple et clair, sur mesure par rapport à ce avec quoi l’on travaille et directement dans notre éditeur de code ! Alors bien sûr cela ne va pas remplacer complètement la documentation officielle mais permet d’avoir une sorte de mémo si on ne se rappelle plus vraiment comment d’appelle telle ou telle méthode, quels paramètres elle demande, dans quel ordre, etc…
OK ! Je pense qu’on a fait le tour, j’espère que vous avez compris la structuration de l’API d’Apple. Alors oui, c’est en anglais, non, il n’existe pas de traduction et la plupart des pages sont beaucoup moins bien documentées que les exemples que je vous ait donné, mais c’est notre point de départ pour pouvoir écrire des programmes, il faut donc se familiariser avec et comprendre son fonctionnement pour en faire ce que l’on veut ! Sur ce je vous laisse et vous dit à la prochaine les amis !
Franchement super ton site bravo hate de voir les prochains cours !
Merci pour tes encouragements ! Je fais ça sur mon temps libre j’espère que ça en aide certains !