Les tableaux vous permettent de regrouper un grand nombre de valeurs dans une seule collection, puis d'accéder à ces valeurs en fonction de leur position dans la collection. Swift utilise la déduction du type de données (type inference) pour déterminer quel type de données votre tableau contient, comme ceci :
var evenNumbers = [2, 4, 6, 8]
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
Comme vous pouvez le constater, Swift utilise des crochets pour marquer le début et la fin d'un tableau, et chaque élément du tableau est séparé par une virgule.
En ce qui concerne la lecture des éléments d'un tableau, il existe un problème : Swift commence à compter à partir de 0. Cela signifie que le premier élément est 0, le deuxième élément est 1, le troisième est 2, etc. Essayez le code ci-dessous dans votre playground :
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
songs[0]
songs[1]
songs[2]
Cela affichera "Shake it Off", "You Belong with Me" et "Back to December" dans le volet des résultats.
La position d'un élément dans un tableau s'appelle son indice, et vous pouvez lire n'importe quel élément du tableau simplement en fournissant son indice. Cependant, vous devez faire attention : notre tableau contient trois éléments, ce qui signifie que les indices 0, 1 et 2 fonctionnent très bien. Mais si vous essayez de lire songs[3]
votre playground cessera de fonctionner - et si vous aviez essayer cela dans une application réelle, cela l'aurait fait planter !
Comme vous avez créé votre tableau en lui attribuant trois chaînes de caractères, Swift sait qu'il s'agit d'un tableau de chaînes de caractères. Vous pouvez le confirmer en utilisant une commande spéciale dans le playground qui affiche le type de données de n'importe quelle variable, comme ceci :
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
type(of: songs)
Cela affichera Array<String>.Type
dans le volet des résultats, vous indiquant que Swift considère que songs
est un tableau de chaînes de caractères (Strings).
Disons que vous avez commis une erreur et que vous avez accidentellement mis un numéro à la fin du tableau. Essayez ceci maintenant et voyez ce que le volet de résultats affiche :
var songs = ["Shake it Off", "You Belong with Me", "Back to December", 3]
type(of: songs)
Cette fois, vous voyez une erreur. Celle-ci n’est pas due au fait que Swift ne peut pas gérer des tableaux contenant des types de données différents comme celui-ci - je vais vous montrer comment faire cela dans un instant ! - mais plutôt parce que Swift cherche à vous aider. Le message d'erreur que vous voyez est le suivant : "heterogenous collection literal could only be inferred to '[Any]'; add explicit type annotation if this is intentional."" Ou, en clair, "il semble que ce tableau soit conçu pour contenir des types de données différents - si c'est vraiment ce que vous voulez, il faut le spécifier explicitement."
La sécurité des types de données (type safety) est importante, et bien que Swift puisse faire en sorte que les tableaux contiennent n'importe quel type de données, ce cas particulier est un accident. Heureusement, je vous ai déjà dit que vous pouviez utiliser les annotations de type (type annotations) pour spécifier exactement le type de données que vous souhaitez qu'un tableau stocke. Pour spécifier le type d'un tableau, écrivez le type de données que vous voulez stocker avec des crochets, comme ceci :
var songs: [String] = ["Shake it Off", "You Belong with Me", "Back to December", 3]
Maintenant que nous avons indiqué à Swift que nous voulons stocker uniquement des chaînes de caractères dans le tableau, il refusera toujours d'exécuter le code car 3 n'est pas une chaîne de caractères.
Si vous voulez vraiment que le tableau contienne n'importe quel type de données, utilisez le type spécial de données Any
, comme ceci :
var songs: [Any] = ["Shake it Off", "You Belong with Me", "Back to December", 3]
Si vous créez un tableau en utilisant la syntaxe indiquée ci-dessus, Swift le crée et le remplit avec les valeurs que nous avons spécifiées. Les choses ne sont pas aussi simples si vous voulez créer le tableau puis le remplir plus tard - cette syntaxe ne fonctionne pas :
var songs: [String]
songs[0] = "Shake it Off"
Il s'agit d'une raison qui vous semblera sûrement absurde, mais qui a de profondes implications en termes de performances. Je crains donc que vous ne deviez faire avec. En termes simples, écrire var songs: [String]
indique à Swift que "la variable songs
contiendra un tableau de chaînes de caractères", mais elle ne crée pas ce tableau en fait. Il n'alloue pas de mémoire vive (RAM) ni ne fait le moindre travail pour créer un tableau. Cela indique simplement qu'il y aura un tableau à un moment donné et qu'il contiendra des chaînes de caractères.
Il y a plusieurs façons de l'exprimer correctement, et celle qui est probablement la plus logique à l'heure actuelle est la suivante :
var songs: [String] = []
Elle utilise une annotation de type pour indiquer clairement que nous voulons un tableau de chaînes de caractères et lui affecte un tableau vide (c'est la partie []
).
Vous verrez aussi couramment cette construction :
var songs = [String]()
Cela signifie la même chose : ()
indique à Swift que nous voulons créer le tableau en question, qui est ensuite affecté à songs
en déduisant le type de données. Cette option est plus courte de deux caractères, ce n'est donc pas une surprise si les programmeurs la préfère !
Vous ne pouvez utiliser qu'un ensemble limité d'opérateurs sur des tableaux. Par exemple, vous pouvez fusionner deux tableaux en utilisant l'opérateur +, comme ceci :
var songs = ["Shake it Off", "You Belong with Me", "Love Story"]
var songs2 = ["Today was a Fairytale", "Welcome to New York", "Fifteen"]
var both = songs + songs2
Vous pouvez également utiliser += pour ajouter et assigner, comme ceci :
both += ["Everything has Changed"]
SAVE 50% To celebrate WWDC23, all our books and bundles are half price, so you can take your Swift knowledge further without spending big! Get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn advanced design patterns, testing skills, and more.
Link copied to your pasteboard.