• 8 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 24/05/2022

Résolvez vos erreurs et finissez l'application

Dans ce chapitre, nous allons finaliser l'application ! Pour rappel, nous suivons les étapes suivantes :

  1. Nous allons apprendre à modifier le texte du label.

  2. Nous allons créer nos tableaux.

  3. Nous allons sélectionner un élément aléatoire dans chaque tableau.

  4. Nous allons les combiner pour créer notre phrase.

Les trois premières sont faites, plus que la dernière !

Euh tout doux, mon écran voit jaune !

C'est-à-dire ?

Regarde, j'ai plein de triangles jaunes !

En chaque de toutes les lignes de code, des messages d'erreur surlignés en jaune s'affichent
Messages d'erreurs ⚠️

Les erreurs dans Xcode

Xcode est un logiciel intelligent. Il relit votre code en permanence et vous indique s’il est correct ou non, et même s'il pourrait être amélioré. C'est tellement utile qu'il faut que vous compreniez dès maintenant comment cela fonctionne !

Les types d'erreurs

Xcode génère des erreurs de 2 niveaux différents :

 Les erreurs

Les erreurs sont des problèmes qui empêchent l'exécution de votre code. Si vous essayez de lancer votre application alors que votre projet contient des erreurs, ça ne marchera pas. Vous recevrez le message : "Build Failed"

 Les avertissements

Les avertissements sont des erreurs mineures qui n'empêchent pas votre code de s'exécuter. Parfois, il peut s'agir de suggestions de Xcode pour améliorer la qualité de votre code. Parfois, Xcode vous avertit que votre code est dangereux, c'est-à-dire qu'il est facilement susceptible de crasher. 

Voir les erreurs

Pour voir toutes les erreurs de votre projet, nous allons découvrir un nouvel onglet du navigateur (panneau de gauche) : celui des erreurs !

Le navigateur des erreurs dans le panneau de gauche. On y voit une liste de message d'erreur avec de petits panneaux Attention jaunes
Navigateur des erreurs

Ici sont rassemblées toutes les erreurs du projet dans tous les fichiers. En cliquant sur une erreur, Xcode vous renvoie au fichier correspondant. Cela peut être pratique quand une modification dans un fichier entraîne une erreur dans un autre.

Si vous voulez seulement savoir combien d'erreurs contient votre projet, pour vérifier par exemple qu'il n'y en a pas, vous pouvez jeter un coup d'œil en haut de l'interface de Xcode :

Running Teki on iPhone 11.  5 avertissements symbolisés par des triangles sont indiqués à droite
Levez les yeux !

À droite, Xcode indique le nombre d'erreurs dans tout le projet.

Résoudre les erreurs

Pour les résoudre, il y a deux options :

  1. L'icône d'erreur contient un point d'exclamation. Lisez la description et, si vous ne trouvez pas la solution seul, je vous suggère de copier la description dans Google. Quelqu'un a probablement rencontré cette erreur et une solution a été trouvée.

  2. L'icône d'erreur contient un point. C'est notre cas ici. Dans ce cas, Xcode est capable de résoudre lui-même l'erreur.

Dans ce deuxième cas, il vous suffit de cliquer sur l'icône (ici le triangle jaune) pour voir la solution que propose Xcode :

À côté du triangle jaune la solution est décrite. Le bouton fix apparaît
Heureusement le Fix est là !

Il suffit ensuite de cliquer sur  Fix  pour que Xcode applique le changement.

Nous allons voir maintenant ce que veut dire ce  let  que nous propose Xcode.

Les constantes

Nous avons une erreur parce que je ne vous ai pas tout dit sur les variables !

En fait, il y en a de deux types différents : les variables et les constantes. Sauriez-vous deviner la différence entre les deux ?

Les variables varient et les constantes… et bien elles restent constantes ! Facile, non ?

Déclarer une constante

Pour déclarer une variable, on utilise le mot clé  var  comme variable… Et pour déclarer une constante, on utilise le mot clé  let  .

Par exemple :

var variable = 0 // Je peux être modifié
let constant = 0 // Je ne peux pas être modifié

Si ensuite, je veux essayer de modifier ces variables :

variable = 1
constant = 1 // Cannot assign to value: 'constant' is a 'let' constant

Xcode ne dira rien pour la première ligne, mais il affichera une erreur rouge pour la deuxième en vous expliquant qu'il ne peut pas modifier la variable, car c'est une constante.

Intérêt des constantes

Soit. Mais quel est l'intérêt de créer une variable qui ne peut pas être modifiée ?

Souvent, on va avoir besoin d'une variable pour juste stocker une donnée, mais pas forcément pour la modifier. Or stocker une donnée consomme de la mémoire. Et stocker une donnée que l'on peut modifier en consomme bien plus !

Pourquoi ?

Cela nécessite une petite explication.

Les constantes et la mémoire

La mémoire d'un ordinateur fonctionne comme une commode. Imaginez une commode infiniment longue avec des tonnes de tiroirs les uns à la suite des autres.

Prenons la variable suivante comme exemple :

var message = "bonjour"

Pour stocker cette variable, votre ordinateur va stocker chaque lettre dans un tiroir comme ceci :

Les lettres B O N J O U R sont écrites à la ligne, chacune dans une case. Une légende indique que ces 7 cases constituent le message variable
une variable en 7 tiroirs

La variable message coûte 7 tiroirs de mémoire.

En fait, pas exactement… Parce que la variable  message  est une variable ! Donc elle peut varier ! Que se passe-t-il alors si au lieu de "bonjour", la variable devient "bonjour, comment ça va ?" ? Il va falloir occuper plein de nouveaux tiroirs ! Mais que fait-on si les tiroirs suivants ont déjà été remplis entre temps avec d'autres variables ? Là, il y a conflit ! 

Pour prévenir cette catastrophe, l'ordinateur va prendre de la marge. Donc en fait voici à quoi ressemble la variable  message  dans la mémoire :

Les lettres B O N J O U R sont écrites à la ligne, chacune dans une case. Une légende indique que le message variable peut dépasser dans des cases qui viennent après ces 7 lettres
Des tiroirs en rab !

À la création de la variable, comme l'ordinateur sait que cette variable est susceptible d'être modifiée, il réserve beaucoup de tiroirs supplémentaires ! Évidemment, c'est autant de tiroirs perdus pour stocker d'autres variables qui permettront d'autres opérations.

D'où les constantes ! Si l'on déclare  message  comme étant une constante comme ceci :

let message = "bonjour"

Dans ce cas, elle sera bien stockée sur seulement 7 tiroirs :

Les lettres B O N J O U R sont écrites à la ligne, chacune dans une case. Une légende indique que ces 7 cases constituent la constante
7 tiroirs pour une constante

C'est donc beaucoup plus optimisé d'utiliser des constantes. Voilà leur principale raison d'être ! Je vous recommande alors d'utiliser dès que possible des constantes.

C'est d'ailleurs ce que vous suggère Xcode :

Variable 'randomIndex1' was never mutated; consider changing to 'let' constant

Il constate que la variable n'est jamais modifiée et nous suggère donc de la déclarer en tant que constante plutôt que variable. Vous pouvez donc transformer les 4 variables concernées en constantes pour supprimer les avertissements.

Votre  ViewController.swift  devrait ressembler à ça :

import UIKit

class ViewController: UIViewController {

let celebrities = ["le Steve Jobs", "le Zinedine Zidane", "la Madonna", "le Karl Lagerfeld", "la Scarlett Johansson"]

let activities = ["du dancefloor", "du barbecue", "de la surprise ratée", "des blagues lourdes", "de la raclette party"]



   @IBOutlet weak var quoteLabel: UILabel!


   @IBAction func changeQuote() {

// On séléctionne un élément alétoire parmi les célébrités


      let randomIndex1 = Int.random(in: 0..<celebrities.count)


let celebrity = celebrities[randomIndex1]

print(celebrity)


// On séléctionne un élément aléatoire parmi les activités


      let randomIndex2 = Int.random(in: 0..<activities.count)


let activity = activities[randomIndex2]

print(activity)


// On modifie le texte

quoteLabel.text = "Le texte du label est modifié !"


}

}

C'est du beau travail ! On touche au but, plus qu'une étape !

Créer notre citation

Il ne nous reste plus qu'à combiner les trois parties de notre phrase. Pour cela, nous allons utiliser un outil bien pratique du type String : la concaténation.

La concaténation, c'est l'addition de chaînes de caractères les unes après les autres. Et pour faire une addition, rien de plus simple ! On utilise le signe plus + !

Par exemple :

var rapport = "Tout " + "va " + "bien !"

 

print(rapport) // Xcode affiche dans la console : Tout va bien !

Donc pour créer notre citation, nous n'avons plus qu'à assembler les trois parties de notre phrase :

let quote = "Tu es " + celebrity + " " + activity + " !"

Il ne nous reste plus qu'à rajouter ce texte dans le label :

quoteLabel.text = quote

Et voilà ! Votre fonction doit désormais ressembler à :

@IBAction func changeQuote() {

// On séléctionne un élément alétoire parmi les célébrités

   let randomIndex1 = Int.random(in: 0..<celebrities.count)

let celebrity = celebrities[randomIndex1]


// On séléctionne un élément aléatoire parmi les activités

   let randomIndex2 = Int.random(in: 0..<activities.count)

let activity = activities[randomIndex2]


// On construit la citation et on l'affecte au texte du label

let quote = "Tu es " + celebrity + " " + activity + " !"


quoteLabel.text = quote

}

Vous pouvez tester votre projet ! Lancez l’application et cliquez sur le bouton !

Notre interface Teki en GIF : à chaque clic, une nouvelle combinaison de phrases est proposée !
Impressionnant, n'est-ce pas ?

À chaque clic, une nouvelle citation est générée !

En résumé

  • Xcode propose 2 niveaux d'erreurs :

    • les erreurs qui empêchent le code de s'exécuter ;

    • les avertissements qui n'empêchent pas le code de s'exécuter.

  • Vous devez toujours résoudre les erreurs et avertissements dès qu'ils surviennent.

  • Pour concaténer plusieurs chaînes de caractères entre elles, on utilise le signe plus : +.

Félicitations ! Vous avez créé votre première application iPhone ! 🎉🎊

Exemple de certificat de réussite
Exemple de certificat de réussite