Pour commencer à créer des applications mobiles, le choix se pose sérieusement aujourd’hui. Parmi toutes les propositions le choix reste difficile. Chacune a ses pours et ses contres. Et bien souvent c’est la question du budget qui viendra trancher pour des technos comme React native. Cependant le natif est loin d’être mort, et maîtriser les langages préconisés par Apple et Google reste un gros plus. Lancé en 2014, Swift reste une option viable et performante pour développer des apps. Le langage a d’ailleurs beaucoup évolué depuis ses premières versions pour devenir de plus en plus lisible, simple mais aussi robuste, sécurisé et performant. Je vous invite donc dans cet article à faire vos premiers pas avec Swift !
Démarrons un projet
Tout d’abord, ouvrez XCode. Ça sera notre outil de prédilection pour cette série d’articles. Dans les choix de templates, allez dans Other et choisissez « Empty« . Avant de courir, apprenons à marcher en découvrant d’abord les fondamentaux du langage. Nous verrons ensuite comment appliquer nos connaissances à une vraie app.

Ensuite dans votre panel de droite, dans la TreeView des fichiers du projet, faites un clic droit et choisissez l’option « New File from Template« . Sur la popup des templates, trouvez la section Playground et choisissez un Blank Playground (ou tapez directement « Blank playground » dans la barre de recherche). Normalement, vous vous retrouvez avec le code suivant:
import UIKit
var greeting = "Hello, playground"
Comme pour tout langage, apprenons à dire bonjour en premier. Nous avons déjà une variable qui a été déclarée et qui contient ce que nous voulons afficher. Ajoutons donc:
print(greeting)
En bas de votre code, vous avez un petit bouton triangle pour lancer l’exécution de votre code. Essayez de cliquer dessus, et vous verrez normalement apparaître dans votre panel tout en bas le message « Hello, playground« .
Comprendre les variables en Swift
Le code pré-généré est très simple. Vous avez le mot clé « var » pour dire que nous allons déclarer une variable, c’est à dire une case mémoire dans laquelle on pourra stocker une valeur. Ensuite nous avons le nom que nous voulons lui donner. Puis après le « = » nous avons la valeur que nous voulons lui assigner.
Faisons un test !
Entre notre var greeting = « Hello, playground et notre print(greeting), ajoutons une ligne:
greeting = "Hello world"
Lancez maintenant le code et vous devriez voir que le texte affiché a changé (sinon c’est que vous avez affiche votre nouvelle ligne trop haut ou trop bas). C’est parce que notre variable est comme son nom l’indique: sa valeur peut changer si on le désire.
Faisons un autre test !
Remplacez « var » par « let » dans votre code, et lancez l’exécution. Ah ! XCode nous remonte une erreur:

Cette erreur nous indique qu’en changeant ce mot clé, nous avons transformé notre variable en constante. C’est à dire une case mémoire qui ne peut pas changer. L’intérêt est double: éviter une erreur causée par un changement de valeur involontaire, et avoir un code plus optimisé. Si le compilateur sait que la valeur ne changera pas, il la traitera différemment.
Différents types de variables
Re-transformons notre constante en variable. Essayons maintenant de la modifier de la façon suivante:
greeting = 20
Vous aurez normalement l’erreur suivante cette fois: Cannot assign value of type ‘Int’ to type ‘String’ ! Parce que même si nous n’avons pas eu à le préciser, nos variables ont un type: texte, nombre, vrai/faux, …
Par exemple nous pouvons définir les deux variables suivantes:
var age = 18
var isHuman = true
Nous avions défini la variable greeting qui était une String (un texte). Nous voilà maintenant avec age qui est un Integer (un nombre) et isHuman qui est un boolean (une valeur soit à true, soit à false). Mais voyons encore une particularité des types: essayer de redéfinir age en dessous avec 18.5.
age = 18.5
Vous aurez cette fois: Cannot assign value of type ‘Double’ to type ‘Int’. Parce qu’un chiffre entier et un chiffre à virgule c’est deux choses différentes en informatique. Pour stocker un chiffre à virgule, nous devons passer non pas par un Integer mais par un Double:
var price : Double = 10
price = 10.5
Ici en déclarant ma variable, je précise son type, comme ça notre variable vaudra en réalité « 10.0 ».
Quand on veut des valeurs fixes
En soi on peut facilement stocker un statut (par exemple « ok » ou « erreur » pour savoir si une opération s’est bien déroulée) avec une String. Mais ça n’est pas forcément le plus propre car une faute de frappe peut vite venir tout casser. Pour ce genre de besoins, on peut définir un Enum. C’est en quelques sortes un type de variable personnalisé qui précise quelles valeurs elle peut prendre:
enum StatusType {
case ok;
case error;
}
Ici, on définit un type de variable « StatusType » avec deux valeurs possibles. Si on crée une variable de type StatusType, notre variable ne pourra avoir qu’une de ces deux valeurs. On la déclare de la façon suivante:
var status = StatusType.ok;
Décider d’activer ou non un bout de code
Pour faire certaines actions ou non dans notre code, on va utiliser ce qu’on appelle une condition. Exactement comme quand vous donnez un ordre conditionnel à quelqu’un du style « s’il y a du lait, achètes-en ». En informatique ça donnera:
if (il y a du lait) {
acheter du lait
}
Par exemple, imaginons que nous voulons afficher un message en fonction de ce que contient notre variable « age » de tout à l’heure:
if age < 18 {
print("You are young")
}
Ici, si notre age est inférieur à 18, on affichera un message. Actuellement rien ne s’affiche, c’est normal (ou modifiez temporairement la valeur pour tester un peu). Essayons d’afficher aussi quelque chose si la personne est plus agée:
if age < 18 {
print("You are young")
} else if age > 18 {
print("You are quite old")
}
Mais actuellement rien ne s’affiche aussi. Pourquoi ? Parce que notre variable est pile égale à 18. Ici on ne traite que ce qui est en dessous ou au dessus. Ajoutons donc un bloc qui s’activera si on est ni dans un cas ni dans l’autre:
if age < 18 {
print("You are young")
} else if age > 18 {
print("You are quite old")
} else {
print("You are 18")
}
Maintenant je vous laisse jouer avec les valeurs de la variable age pour tester les trois cas de figure !
Des conditions pour des valeurs fixes
Ici nous utilisons « < » ce qui signifie que le bloc s’exécutera pour les valeurs 0, 1, 2, 3, 4, …, 16, 17 (et en dessous de 0 mais je ne vais pas tout écrire). Si nous avons des valeurs fixes, par exemple dans le cas de notre enum, c’est redondant de faire:
if (status === .ok) {
...
} else if (status === .error) {
...
}
En soi ça prend peu de lignes, mais ça demande au compilateur de tester chaque condition jusqu’à tomber sur la bonne. Oui votre ordi/smartphone est puissant, mais sur des grosses applis l’optimisation est importante !
Pour ce genre de cas de figure, on peut utiliser une syntaxe particulière: le switch. C’est une condition unique (elle ne traitera qu’une seule seule variable à la fois) mais qui trouve directement le bon bloc à exécuter. La syntaxe est la suivante:
switch status {
case .ok:
print("Everything done")
case .error:
print("BIG ERROR SYSTEM")
}
Ici on regarde notre variable status. Si sa valeur est StatusType.ok (qu’on peut raccourcir en .ok vu qu’on sait que notre variable est un StatusType), on affiche que c’est bon.
À vous de jouer
Essayer pour clôturer ce premier article de faire une fiche d’identité avec nom, prénom, age, genre. Essayez de faire le code suivant:
- Si le nom et le prénom correspondent au votre, afficher « Bonjour, moi », sinon afficher « Bonjour, inconnu ».
- Si l’age est entre 18 et 26, afficher « Vous êtes majeur, mais vous pouvez visiter les musées gratuitement ».
- Le genre doit être un enum. Afficher un message personnalisé en fonction du choix de l’utilisateur.
Dans le prochain article, on verra comment aller plus loin avec les enums, avec les conditions, et comment faire des blocs de code réutilisables au besoin.