Types de données Swift

Lorsque nous programmons dans n'importe quel langage de programmation, nous devons utiliser divers types de données pour stocker différents types d'informations.

Le type de données d'une variable détermine comment les bits représentant ces valeurs sont stockés dans la mémoire de l'ordinateur. Vous pouvez également spécifier son type de données lors de la déclaration d'une variable.

Toutes les variables ont un type de données pour déterminer quel type de données elles peuvent stocker.


Types de données intégrés

Swift fournit un ensemble très riche de types de données. La liste suivante présente plusieurs types de données couramment utilisés :

Int

Généralement, vous n'avez pas besoin de spécifier explicitement la longueur des entiers. Swift fournit un type d'entier spécialInt, dont la longueur est identique à la taille de mot native de la plateforme actuelle :

  • Sur les plateformes 32 bits,IntetInt32la longueur est la même.
  • Sur les plateformes 64 bits,IntetInt64la longueur est la même.

À moins d'avoir besoin d'entiers d'une longueur spécifique, utilisez généralementIntsuffit. Cela améliore la cohérence et la réutilisabilité du code. Même sur une plateforme 32 bits,Intla plage d'entiers pouvant être stockés peut atteindre-2,147,483,648~2,147,483,647, ce qui est suffisamment grand la plupart du temps.

UInt

Swift fournit également un type non signé spécialUInt, dont la longueur est identique à la taille de mot native de la plateforme actuelle :

  • Sur les plateformes 32 bits,UIntetUInt32la longueur est la même.
  • Sur les plateformes 64 bits,UIntetUInt64la longueur est la même.

Remarque :Essayez d'éviter d'utiliserUInt, sauf si vous avez vraiment besoin de stocker un entier non signé de la même taille que la longueur de mot native de la plateforme actuelle. En dehors de ce cas, il est préférable d'utiliserInt, même si la valeur que vous souhaitez stocker est connue comme étant non négative. En l'utilisant de manière cohérenteIntpeut améliorer la réutilisabilité du code, éviter les conversions entre différents types de nombres et correspondre à l'inférence de type des nombres.

Les points suivants doivent être notés concernant les types entiers :

  • Sur les systèmes 32 bits, Int et Int32 ont la même longueur.

  • Sur les systèmes 64 bits, Int et Int64 ont la même longueur.

  • Sur les systèmes 32 bits, UInt et UInt32 ont la même longueur.

  • Sur les systèmes 64 bits, UInt et UInt64 ont la même longueur.

  • Int8, Int16, Int32 et Int64 représentent respectivement les formes d'entiers signés de 8 bits, 16 bits, 32 bits et 64 bits.

  • UInt8, UInt16, UInt32 et UInt64 représentent respectivement les formes d'entiers non signés de 8 bits, 16 bits, 32 bits et 64 bits.

Nombres à virgule flottante : Float, Double

Les nombres à virgule flottante sont des nombres avec une partie fractionnaire, tels que3.14159,0.1et-273.15。

Les types à virgule flottante peuvent représenter une plage plus grande que les types entiers, et peuvent stocker des nombres plus grands ou plus petits queIntle type. Swift propose deux types de nombres à virgule flottante signés :

  • DoubleReprésente un nombre à virgule flottante de 64 bits. Utilisez ce type lorsque vous devez stocker des nombres à virgule flottante très grands ou très précis.
  • FloatReprésente un nombre à virgule flottante de 32 bits. Vous pouvez utiliser ce type si une haute précision n'est pas requise.

Remarque :
Doublea une très haute précision, avec au moins 15 chiffres, tandis queFloatne possède qu'un minimum de 6 chiffres. Le type que vous choisissez dépend de la plage de valeurs que votre code doit gérer.

Valeur booléenne : Bool

Swift dispose d'un type booléen de base, appelé Bool. Les valeurs booléennes désignent des valeurs logiques, car elles ne peuvent être que true ou false. Swift possède deux constantes booléennes, true et false.

Chaîne de caractères : String

Une chaîne de caractères est une collection de séquences de caractères, par exemple :

"Hello, World!"

Caractère : Character

Un caractère désigne une seule lettre, par exemple :

"C"

Type optionnel : Optional

Utilisez les types optionnels pour gérer les situations où une valeur peut être manquante. Un type optionnel représente une valeur ou l'absence de valeur.

Plages numériques

Le tableau suivant indique l'espace de stockage mémoire pour différents types de variables, ainsi que les valeurs maximale et minimale de ces types de variables :

Type Taille (octets) Plage de valeurs
Int8 1 octet -128 à 127
UInt8 1 octet 0 à 255
Int32 4 octets -2147483648 à 2147483647
UInt32 4 octets 0 à 4294967295
Int64 8 octets -9223372036854775808 à 9223372036854775807
UInt64 8 octets 0 à 18446744073709551615
Float 4 octets 1.2E-38 à 3.4E+38 (~6 chiffres)
Double 8 octets 2.3E-308 à 1.7E+308 (~15 chiffres)

Alias de type

Un alias de type définit un autre nom pour un type existant. Les alias de type sont définis à l'aide du mot-clé typealias. La syntaxe est la suivante :

typealias newname = type

Par exemple, ce qui suit définit un alias de type pour Int nommé Feet :

typealias Feet = Int

Maintenant, nous pouvons définir des variables à l'aide de l'alias :

import Cocoa

typealias Feet = Int
var distance: Feet = 100
print(distance)

Nous utilisons playground pour exécuter le programme ci-dessus, et la sortie est :

100

Sûreté de typage

Swift est un langage à typage sûr.

Comme Swift est à typage sûr, il effectue des vérifications de type lors de la compilation de votre code et signale les types incompatibles comme des erreurs. Cela vous permet de découvrir et de corriger les erreurs tôt pendant le développement.

import Cocoa

var varA = 42
varA = "This is hello"
print(varA)

Le programme ci-dessus signalera une erreur dans Xcode :

error: cannot assign value of type 'String' to type 'Int'
varA = "This is hello"

Cela signifie qu'une chaîne 'String' ne peut pas être affectée à une variable 'Int'.


Inférence de type

Lorsque vous devez traiter différents types de valeurs, la vérification de type peut vous aider à éviter des erreurs. Toutefois, cela ne signifie pas que vous devez spécifier explicitement le type chaque fois que vous déclarez une constante ou une variable.

Si vous ne spécifiez pas explicitement le type, Swift utilise l'inférence de type pour choisir un type approprié.

Par exemple, si vous affectez 42 à une nouvelle constante sans spécifier de type, Swift peut déduire que le type de la constante est Int, car la valeur initiale que vous lui avez affectée ressemble à un entier :

let meaningOfLife = 42
// meaningOfLife 会被推测为 Int 类型

De même, si vous ne spécifiez pas de type pour un littéral à virgule flottante, Swift déduira que vous voulez Double :

let pi = 3.14159
// pi 会被推测为 Double 类型

Lorsqu'il infère le type des nombres à virgule flottante, Swift choisit toujours Double plutôt que Float.

Si des entiers et des nombres à virgule flottante apparaissent tous les deux dans une expression, elle sera inférée comme étant de type Double :

let anotherPi = 3 + 0.14159
// anotherPi 会被推测为 Double 类型

La valeur d'origine 3 n'a pas de déclaration de type explicite, et un littéral à virgule flottante apparaît dans l'expression, donc l'expression est inférée comme étant de type Double.

Exemples

import Cocoa

// varA 会被推测为 Int 类型 
var varA = 42
print(varA)

// varB 会被推测为 Double 类型  
var varB = 3.14159
print(varB)

// varC 也会被推测为 Double 类型   
var varC = 3 + 0.14159
print(varC)

Exécutez le code ci-dessus, la sortie est :

42
3.14159
3.14159
Autres extensions