Dans l'article précédent, vous avez découvert les variables, les constantes et certains des types de données courants, tels que les entiers, les flottants et les chaînes. Dans cet article, nous zoomons sur les collections. La bibliothèque standard de Swift définit trois types de collections: les ensembles, les tableaux et les dictionnaires. Commençons par les tableaux.
Si vous connaissez Objective-C, JavaScript ou PHP, il ne sera pas difficile de comprendre les tableaux. Un tableau est un ensemble ordonné de valeurs indexées à zéro. Mais il y a quelques différences importantes entre les tableaux pour Swift et les autres langages de programmation.
La première différence importante par rapport aux tableaux dans Objective-C est que les valeurs stockées dans un tableau sont toujours du même type. Au début, cela peut sembler une limitation importante, mais ce n’est pas le cas. En fait, cette limitation présente un avantage important. Nous savons exactement quel type nous obtenons lorsque nous demandons au tableau l'une de ses valeurs.
Une autre différence clé est le type de valeurs qu'un tableau peut stocker. En Objective-C, un tableau ne peut stocker que les valeurs d'un type de classe. Swift n'a pas cette limitation. Un tableau dans Swift peut stocker des chaînes, des entiers, des flottants et des instances de classe. Comment cela fonctionne et pourquoi cela est possible dans Swift apparaîtra plus tard dans cette série lorsque nous couvrirons les classes et les structures.
Bien qu'il existe plusieurs façons de créer un tableau, vous devez garder à l'esprit que Swift doit savoir quel type de valeurs vous souhaitez stocker dans le tableau. Créez une nouvelle aire de jeux dans Xcode, comme dans l'article précédent, et ajoutez les lignes suivantes à votre aire de jeux.
var tableau1: tableauvar array2: [String] var array3 = ["Apple", "Pear", "Orange"]
Les première et deuxième lignes signifient la même chose. La deuxième ligne est juste un raccourci. Les crochets enveloppant le Chaîne
mot-clé dire à Swift que nous déclarons un tableau qui ne peut contenir Chaîne
objets.
Vous pouvez lire la première ligne de code comme suit: "Nous déclarons une variable nommée tableau1
de type Tableau
qui ne peut contenir Chaîne
objets. "Les deux points signifie de type.
La troisième ligne nous montre comment initialiser un tableau en utilisant un littéral de tableau. Les littéraux de tableau sont très similaires aux littéraux de tableau dans Objective-C. La principale différence est l’absence de @
symbole précédant les crochets et les littéraux de chaîne.
Il existe également un moyen élégant d’initialiser un tableau avec un nombre prédéfini de valeurs par défaut. La syntaxe peut être déroutante au début, mais prenez un moment pour la laisser pénétrer.
var a = [String] (en répétant: "Test", compte: 5)
Le tableau résultant contient cinq chaînes, chaque chaîne étant égale à "Tester"
. Pour mieux comprendre l'initialisation ci-dessus, jetez un coup d'œil aux deux lignes de code suivantes dans lesquelles nous initialisons un tableau vide de chaînes..
var b = tableau() var c = [chaîne] ()
Ne vous inquiétez pas si vous êtes toujours confus. Nous explorerons la syntaxe plus en détail une fois que nous aurons commencé à traiter des classes et des fonctions. Dans cet article, nous nous concentrons uniquement sur les collections..
Un aspect de Swift que vous allez rapidement comprendre est la façon de déclarer des collections modifiables. L'extrait de code ci-dessus, par exemple, déclare trois tableaux mutables. Un tableau mutable est défini en utilisant le var
mot-clé. C'est si simple.
Si vous ne voulez pas qu'un tableau soit mutable, utilisez le laisser
mot-clé à la place. Swift vise à être intuitif et facile à utiliser, et sa mise en œuvre de la mutabilité en est un parfait exemple..
Pour accéder aux valeurs stockées dans un tableau, nous utilisons la même syntaxe d'indice que dans Objective-C. Dans l'exemple suivant, nous demandons tableau3
pour son deuxième élément, la chaîne "Poire"
.
tableau3 [1]
Remplacement de la valeur stockée à l'index 1
est aussi simple que d'attribuer une nouvelle valeur en utilisant la même syntaxe d'indice. Dans l'exemple suivant, nous remplaçons "Poire"
à l'index 1
avec "Pêche"
.
array3 [1] = "Pêche"
Ceci n’est possible que parce que le tableau est mutable, c’est-à-dire que nous avons utilisé le var
mot-clé pour déclarer le tableau. La mutation d'un tableau constant n'est pas possible. Il existe des techniques plus avancées pour manipuler le contenu d'un tableau, mais le concept sous-jacent est le même..
La fusion de deux tableaux est aussi simple que de les additionner. Dans l'exemple suivant, nous déclarons et fusionnons deux tableaux immuables. Notez que le tableau résultant, c
, n'a pas besoin d'être mutable pour que cela fonctionne.
Soit a = [1, 2, 3] soit b = [4, 5, 6] soit c = a + b
Cependant, il est essentiel que les valeurs stockées dans une
et b
sont du même type. La raison devrait être évidente maintenant. Comme je l'ai mentionné précédemment, les valeurs stockées dans un tableau doivent être du même type. L'exemple suivant génère une erreur.
Soit a = [1, 2, 3] soit b = [1.5, 5.2, 6.3] soit c = a + b
Pour ajouter un tableau à un tableau mutable, nous utilisons le +=
opérateur. Notez que l'opérande à droite est un tableau. Cette opération ne fonctionnerait pas si nous supprimions les crochets entourant 4
.
var a = [1, 2, 3] a + = [4]
Les tableaux sont des objets sur lesquels vous pouvez effectuer un grand nombre d'opérations. Les tableaux exposent un certain nombre de fonctions ou de méthodes. Pour invoquer une méthode sur un objet, vous utilisez la notation par points. Ajoutez la ligne suivante à votre terrain de jeu pour ajouter un objet à tableau3
.
array3.append ("Cherry")
Voyons combien d'objets tableau3
contient en inspectant la valeur de son compter
propriété. Cette sortie 4
dans le volet de résultats.
array3.count
Il est également possible d'insérer un élément à un index spécifique en appelant le tableau insérer (_: at :)
méthode comme indiqué ci-dessous. le insérer (_: at :)
méthode accepte plusieurs paramètres et la syntaxe peut sembler un peu étrange au début.
array3.insert ("Prune", at: 2)
Comme Objective-C, Swift prend en charge les paramètres nommés pour améliorer la lisibilité. Le résultat est que le code est plus facile à lire et à comprendre et que les fonctions ou les méthodes n'ont pas besoin de beaucoup d'explications sur ce qu'elles font. Il est clair, par exemple, que le insérer (_: at :)
méthode insère un élément à l'index 2
.
Bien que Swift soit plus concis et moins détaillé que Objective-C, il prend en charge les paramètres nommés. Si vous venez de PHP, Ruby ou JavaScript, c’est certainement quelque chose qui demande de l’habitude.
Ce que j’apprécie vraiment à propos de Swift, ce sont les propriétés de commodité et les méthodes de la bibliothèque standard de Swift. Un tableau, par exemple, a un est vide
propriété qui vous indique si le tableau contient des éléments. Ceci n’est rien d’autre qu'un raccourci pour vérifier le tableau compter
propriété. Le résultat, cependant, est un code plus concis et plus facile à lire..
array3.isEmpty
Les dictionnaires se comportent de manière très similaire aux dictionnaires d'Objective-C. Un dictionnaire stocke une collection non ordonnée de valeurs. Chaque valeur du dictionnaire est associée à une clé. En d'autres termes, un dictionnaire stocke un certain nombre de paires clé / valeur.
Comme pour les tableaux, les clés et les valeurs stockées dans un dictionnaire doivent être du même type. Cela signifie que si vous demandez à un dictionnaire la valeur d'une clé particulière, vous savez quel type le dictionnaire retournera..
Déclarer un dictionnaire est similaire à déclarer un tableau. La différence est que vous devez spécifier le type des clés et des valeurs. L'exemple suivant montre trois façons de déclarer un dictionnaire.
var dictionary1: dictionnairevar dictionary2: [String: Int] var dictionary3 = ["Apple": 3, "Poire": 8, "Orange": 11]
La deuxième ligne est un raccourci pour la première ligne. Les clés de ces dictionnaires doivent être de type Chaîne
alors que les valeurs devraient être de type Int
. le var
mot-clé indique que les dictionnaires sont mutables.
Vous pouvez lire la première ligne de code comme suit: "Nous déclarons une variable nommée dictionnaire1
de type dictionnaire
qui ne peut contenir que des clés de type Chaîne
et valeurs de type Int
."
La troisième ligne illustre comment initialiser un dictionnaire en utilisant un dictionnaire littéral. Ceci est similaire à la syntaxe utilisée dans Objective-C, mais notez que les accolades sont remplacées par des crochets et que le littéral n'est pas précédé d'un préfixe. @
symbole.
L'accès aux valeurs est similaire à l'accès aux valeurs d'un tableau. La seule différence est que vous utilisez la clé au lieu de l'index de la valeur à laquelle vous devez accéder. L'exemple suivant illustre cette.
let value = dictionary3 ["Apple"] print (valeur)
Vous remarquerez que Xcode nous dit que la valeur de valeur
n'est pas 3
, mais En option (3)
. Qu'est-ce que ça veut dire? Swift utilise des options pour encapsuler des valeurs pouvant être l’une des deux choses suivantes: une valeur ou une valeur. néant
. Ne vous inquiétez pas des optionnels en ce moment. Nous allons nous concentrer sur les optionnels dans le prochain article de cette série. Permettez-moi de vous dire que les options sont un autre concept clé du langage de programmation Swift.
Il est intéressant de noter que la syntaxe pour accéder à une valeur de dictionnaire est identique à celle de tableaux, si les clés du dictionnaire sont de type Int
. Regardez l'exemple suivant pour voir ce que je veux dire.
var dictionnaire4 = [0: "pomme", 1: "poire", 2: "orange"] laissez fruit = dictionnaire4 [0]
Comme pour les tableaux, la bibliothèque standard Swift définit un large éventail d’opérations que vous pouvez effectuer sur des dictionnaires. Vous pouvez demander à un dictionnaire son nombre de paires clé / valeur via son compter
propriété. Supprimer un couple clé / valeur est simple et intuitif, comme l'illustre l'exemple suivant. Bien sûr, cela n'est possible que si le dictionnaire est modifiable.
dictionary4.removeValue (forKey: 0)
Lorsque vous commencez à apprendre Swift, vous risquez de rencontrer des extraits de code qui semblent bizarres ou déroutants. Jetez un coup d’œil à la ligne suivante, dans laquelle nous déclarons d’abord un dictionnaire puis retirons ses paires clé / valeur.
var dictionary = [String: Int] () dictionary ["Oranges"] = 2 dictionary ["Apples"] = 10 dictionary ["Pears"] = 5 dictionary = [:]
Vous devez admettre que la dernière ligne est un peu étrange. Swift connaissant les types de clés et de valeurs pouvant être stockés dans dictionnaire
, Vider le dictionnaire est aussi simple que de lui attribuer un dictionnaire vide..
Il n'est pas nécessaire de spécifier les types pour les clés et les valeurs dans ce cas, car nous l'avions déjà fait lorsque nous avons déclaré le dictionnaire à la première ligne. Cela met en évidence un autre détail important, à savoir que le type de valeurs que vous pouvez stocker dans des tableaux et des dictionnaires ne peut pas changer une fois la collection déclarée..
Les ensembles sont très similaires aux tableaux en ce sens qu'ils stockent une collection de valeurs du même type. Mais il y a plusieurs différences importantes. Les éléments stockés dans un ensemble ne sont pas ordonnés et chaque élément ne peut apparaître qu'une fois dans un ensemble..
Travailler avec des ensembles est un peu différent de travailler avec des tableaux. Regardez les exemples suivants dans lesquels nous déclarons trois ensembles. le set1
la variable est de type Ensemble
, un ensemble qui ne peut contenir que des valeurs de type Chaîne
.
var set1: Setvar set2 = Set () var set3: Set = ["Pomme", "Poire", "Orange"]
le set2
variable est un ensemble vide et nous utilisons un littéral de tableau dans le troisième exemple pour créer et renseigner un ensemble mutable contenant trois valeurs. Grâce à l'inférence de type de Swift, nous pouvons omettre le type de l'ensemble.
var set3: Set = ["Apple", "Pear", "Orange"]
Travailler avec des ensembles est similaire à travailler avec des tableaux. Nous pouvons demander le nombre d'éléments stockés dans un ensemble en inspectant celui-ci. compter
propriété.
set3.count
Insérer un élément est facile. Comme les éléments d'un ensemble ne sont pas ordonnés, il n'est pas nécessaire de spécifier l'emplacement du nouvel élément..
set3.insert ("Prune")
Et la même chose s'applique à la suppression d'un élément d'un ensemble.
set3.remove ("Orange")
Vous pouvez également demander à un ensemble s'il contient un élément particulier.
set3.contains ("Apple")
Je fais souvent référence aux ensembles en tant que versions allégées de tableaux. Si l'ordre des éléments n'est pas important ou si vous voulez vous assurer que chaque élément ne peut apparaître qu'une seule fois dans une collection, les ensembles sont la voie à suivre..
Vous allez aimer les tuples. Les tuples ne sont pas des collections, mais comme les collections, elles regroupent également plusieurs valeurs. Semblables aux tableaux et aux dictionnaires, les n-uplets peuvent contenir des valeurs de tout type. La principale différence, cependant, est que les valeurs stockées dans un tuple ne doivent pas nécessairement être du même type. Regardons un exemple pour expliquer cela plus en détail.
import Foundation var devise = ("EUR", 0,81) var time = (Date (), "Ceci est mon message.") var email = ("Bart Jacobs", "[email protected]")
Le premier exemple déclare un tuple nommé devise
c'est de type (String, Int)
. Le deuxième tuple, temps
, contient un Rendez-vous amoureux
instance et un littéral de chaîne. Les valeurs stockées dans email
sont tous deux de type Chaîne
, ce qui signifie email
est de type (String, String)
.
Pour accéder à une valeur stockée dans un tuple, vous utilisez l'index correspondant à la valeur qui vous intéresse.
var rate = currency.1 var message = time.1 var name = email.0
Xcode nous montre les index de chaque valeur stockée dans un tuple dans le volet de résultats du terrain de jeu de droite.
Pour améliorer la lisibilité, vous pouvez nommer les valeurs stockées dans un tuple. Le résultat est que vous pouvez accéder aux valeurs du tuple par leurs noms plutôt que par leurs index. Déclarer un tuple est légèrement différent dans ce cas.
var currency = (nom: "EUR", tarif: 0,81) let currencyName = currency.name let currencyRate = currency.rate
Il existe une deuxième façon, plus élégante, de travailler avec les valeurs stockées dans un tuple. Jetez un coup d’œil à l’exemple suivant dans lequel nous décomposons le contenu de devise
.
let (currencyName, currencyRate) = devise
La valeur de devise
à l'index 0
est stocké dans currencyName
, et la valeur à l'index 1
est stocké dans cours des devises
. Il n'est pas nécessaire de spécifier le type pour currencyName
et cours des devises
puisque Swift déduit le type à partir des valeurs stockées dans devise
. En d'autres termes, currencyName
est de type Chaîne
, et cours des devises
est de type Flotte
.
Si vous êtes uniquement intéressé par les valeurs spécifiques d'un tuple, vous pouvez utiliser un trait de soulignement pour indiquer à Swift les valeurs qui ne vous intéressent pas..
let (currencyName, _) = devise
Les tableaux et les dictionnaires sont des composants fondamentaux de presque tous les langages de programmation, et Swift n'est pas différent. Bien que les collections se comportent un peu différemment dans Swift, il est facile de se familiariser avec les types de collections de Swift si vous avez déjà utilisé des tableaux et des dictionnaires dans d'autres langages de programmation. Dans le prochain tutoriel, nous explorons les options et le flux de contrôle.
Nous avons créé un guide complet pour vous aider à apprendre Swift, que vous commenciez juste à vous familiariser avec les bases ou que vous souhaitiez explorer des sujets plus avancés..
Si vous souhaitez utiliser rapidement la langue Swift, consultez notre cours sur la création d'applications iOS avec Swift..
Ou consultez nos autres tutoriels et cours sur le développement Swift et iOS!