Comment convertir un Swift Array en String ? Tutoriel complet avec exemples
\n\nBonjour, futur développeur iOS ! Si tu t'es déjà demandé "How do I convert a Swift Array to a String?" — tu n'es pas seul. Cette question a rassemblé des milliers de vues sur Stack Overflow, et aujourd'hui nous allons la résoudre une fois pour toutes. Pourquoi en as-tu besoin ? Imagine : tu collectes des données depuis un formulaire, tu enregistres des erreurs ou tu prépares du texte à envoyer au serveur. Dans tous ces cas, il faut transformer le tableau en une chaîne lisible. C'est parti !
\n\nLa méthode la plus simple : la méthode joined()
\n\nEn Swift, pour concaténer un tableau de chaînes en une seule chaîne, on utilise la méthode joined(). C'est le chemin le plus court du tableau à la chaîne. Regarde cet exemple de base :
let fruits = ["Pomme", "Banane", "Orange"]\nlet fruitsString = fruits.joined()\nprint(fruitsString) // Affiche : "PommeBananeOrange"\n\nCependant, le résultat semble collé. Pour rendre la chaîne lisible, utilise joined(separator:) — il ajoute un séparateur entre les éléments :
let fruits = ["Pomme", "Banane", "Orange"]\nlet fruitsString = fruits.joined(separator: ", ")\nprint(fruitsString) // Affiche : "Pomme, Banane, Orange"\n\nImportant : joined() fonctionne uniquement avec les tableaux contenant des chaînes ([String]). Si tu as un tableau de nombres ou d'autres types, tu dois d'abord convertir chaque élément.
Méthode universelle : map() + joined()
\n\nQue faire si tu as un tableau d'entiers ([Int]), de nombres décimaux ([Double]) ou, disons, de structures personnalisées ? La méthode map() vient à la rescousse. Elle transforme chaque élément selon une règle donnée, puis on concatène le résultat :
let numbers = [1, 2, 3, 4, 5]\nlet numbersString = numbers.map { String($0) }.joined(separator: ", ")\nprint(numbersString) // Affiche : "1, 2, 3, 4, 5"\n\nIci, map { String($0) } transforme chaque nombre en chaîne. Ensuite, le tableau de chaînes est facilement concaténé avec joined().
Exemple avec des objets complexes
\n\nSupposons que tu aies un tableau d'utilisateurs et que tu veuilles obtenir une chaîne avec leurs noms :
\n\nstruct User {\n let name: String\n let age: Int\n}\n\nlet users: [User] = [\n User(name: "Anna", age: 25),\n User(name: "Boris", age: 30),\n User(name: "Victoria", age: 28)\n]\n\nlet namesString = users.map { $0.name }.joined(separator: ", ")\nprint(namesString) // Affiche : "Anna, Boris, Victoria"\n\nMéthode avancée : reduce(into:)
\n\nLa méthode reduce(into:) est un outil plus flexible. Elle permet de construire une chaîne avec un contrôle total sur le processus. Par exemple, tu peux ajouter un préfixe, un suffixe ou numéroter les éléments :
let colors = ["Rouge", "Vert", "Bleu"]\nlet result = colors.reduce(into: "Mes couleurs : ") { (partialResult, color) in\n partialResult += color + ", "\n}\n// Supprimer le dernier ", " si nécessaire\nlet finalString = String(result.dropLast(2))\nprint(finalString) // Affiche : "Mes couleurs : Rouge, Vert, Bleu"\n\nRemarque : nous supprimons manuellement les deux derniers caractères (la virgule et l'espace). Cela rend le code moins élégant que joined(), mais reduce est indispensable lorsqu'une logique de construction complexe est nécessaire.
Gestion des valeurs optionnelles (Optionals)
\n\nDans les projets réels, les tableaux contiennent souvent des nil. Si tu appelles simplement joined(), le compilateur générera une erreur. La solution est de filtrer les nil avec compactMap() :
let optionalStrings: [String?] = ["Bonjour", nil, "Monde", nil, "Swift"]\nlet safeString = optionalStrings.compactMap { $0 }.joined(separator: " ")\nprint(safeString) // Affiche : "Bonjour Monde Swift"\n\ncompactMap { $0 } supprime automatiquement tous les nil et retourne