Tableaux en Swift : 5 erreurs fatales lors de l'ajout d'éléments (et comment les éviter)

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi même append peut casser le code ?

\n\n

On pourrait penser qu'il n'y a rien de plus simple que d'ajouter un élément à un tableau en Swift. On écrit array.append(newElement) et le tour est joué. Pourtant, à en juger par les milliers de vues sur Stack Overflow, c'est cette opération, apparemment triviale, qui déroute aussi bien les débutants que les développeurs expérimentés.

\n\n

Dans cet article, nous ne nous contenterons pas de montrer comment ajouter un élément à un tableau en Swift. Nous allons décortiquer les 5 erreurs les plus courantes et les plus sournoises qui transforment un simple append en casse-tête. Vous découvrirez pourquoi le compilateur peut râler sur un code apparemment correct, comment ne pas sortir des limites du tableau et quelle est la différence entre append et insert. C'est parti !

\n\n

Erreur n°1 : Oublier le typage strict

\n\n

Swift est un langage au typage strict. Cela signifie qu'un tableau déclaré comme [Int] n'acceptera pas une chaîne de caractères, même si elle ressemble beaucoup à un nombre. C'est un piège fréquent pour ceux qui viennent de Python ou JavaScript.

\n\n

Problème : Incompatibilité de types

\n\n
var numbers: [Int] = [1, 2, 3]\n// Erreur de compilation : Cannot convert value of type 'String' to expected argument type 'Int'\nnumbers.append("4")\n
\n\n

Solution : Conversion de types

\n\n

Convertissez toujours explicitement les données vers le type du tableau. Utilisez des initialiseurs ou une conversion explicite :

\n\n
var numbers: [Int] = [1, 2, 3]\nif let intValue = Int("4") {\n    numbers.append(intValue) // ✅ Fonctionne : numbers = [1, 2, 3, 4]\n}\n\n// Ou pour un tableau de chaînes :\nvar strings: [String] = ["a", "b"]\nstrings.append(String(42)) // ✅ "42" ajouté en tant que chaîne\n
\n\n

Conseil : Si vous ajoutez des éléments provenant d'une source externe (API, saisie utilisateur), vérifiez toujours le type avec as? ou utilisez compactMap pour filtrer les nil.

\n\n

Erreur n°2 : Index out of range lors de l'utilisation de insert

\n\n

La méthode insert(_:at:) permet d'insérer un élément à une position arbitraire. Mais si vous spécifiez un index supérieur au nombre d'éléments dans le tableau, l'application plantera avec Fatal error: Index out of range.

\n\n

Problème : Insertion en dehors des limites du tableau

\n\n
var fruits = ["Pomme", "Banane"]\n// Tableau de 2 éléments : index 0 et 1\n// Erreur ! L'index 5 n'existe pas\nfruits.insert("Orange", at: 5)\n
\n\n

Solution : Vérification des limites et extension sécurisée

\n\n

Il existe deux façons d'éviter cette erreur :

\n
    \n
  • Vérification de l'index : Assurez-vous que l'index est compris entre 0 et array.count (inclus pour insert).
  • \n
  • Ajout automatique : Si vous souhaitez insérer un élément à la fin en cas de dépassement, utilisez une logique avec append.
  • \n
\n\n
var fruits = ["Pomme", "Banane"]\n\n// Option sécurisée 1 : vérification\nlet index = 5\nif index >= 0 && index <= fruits.count {\n    fruits.insert("Orange", at: index)\n} else {\n    // Si l'index est supérieur à count, on ajoute simplement à la fin\n    fruits.append("Orange")\n}\nprint(fruits) // ["Pomme", "Banane", "Orange"]\n\n// Option sécurisée 2 : extension\nextension Array {\n    mutating func safeInsert(_ element: Element, at index: Int) {\n        if index >= 0 && index <= self.count {\n            self.insert(element, at: index)\n        } else {\n            self.append(element)\n        }\n    }\n}\n\nfruits.safeInsert("Kiwi", at: 100) // ✅ Ajoutera à la fin\n
\n\n

Erreur n°3 : Confusion entre append et +=

\n\n

L'opérateur += peut également ajouter des éléments, mais son comportement diffère de append. La principale différence : += fonctionne avec des collections, et non avec des éléments individuels.

\n\n

Problème : Création implicite d'un tableau

\n\n
var list = [1, 2, 3]\nlis                

Blogs

Book Recommendations