TEAM LICENSES: Save money and learn new skills through a Hacking with Swift+ team license >>

Tableaux (Arrays)

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]

Création de tableaux

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 !

Opérateurs de tableau

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"]
Hacking with Swift is sponsored by Blaze.

SPONSORED Still waiting on your CI build? Speed it up ~3x with Blaze - change one line, pay less, keep your existing GitHub workflows. First 25 HWS readers to use code HACKING at checkout get 50% off the first year. Try it now for free!

Reserve your spot now

Sponsor Hacking with Swift and reach the world's largest Swift community!

BUY OUR BOOKS
Buy Pro Swift Buy Pro SwiftUI Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let us know!

Average rating: 5.0/5

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.