Énumérations Swift

Les énumérations sont, en termes simples, aussi un type de données, sauf que ce type de données ne contient que des données spécifiques définies par l'utilisateur ; c'est une collection de données ayant des caractéristiques communes.

Les énumérations Swift sont similaires aux constructions d'Objective-C et de C. Les caractéristiques des énumérations sont :

  • Il est déclaré dans une classe, et l'on peut accéder à sa valeur en instanciant la classe.

  • Les énumérations peuvent également définir des initialiseurs pour fournir une valeur membre initiale ; vous pouvez étendre leurs fonctionnalités en fonction de l'implémentation d'origine.

  • Elles peuvent se conformer à des protocoles pour fournir des fonctionnalités standard.

Syntaxe

En Swift, le mot-clé enum est utilisé pour créer des énumérations, et leur définition entière est placée entre une paire d'accolades :

enum enumname {
   // 枚举定义放在这里
}

Par exemple, nous définissons l'énumération suivante représentant les jours de la semaine :

import Cocoa

// 定义枚举
enum DaysofaWeek {
    case Sunday
    case Monday
    case TUESDAY
    case WEDNESDAY
    case THURSDAY
    case FRIDAY
    case Saturday
}

var weekDay = DaysofaWeek.THURSDAY
weekDay = .THURSDAY
switch weekDay
{
case .Sunday:
    print("星期天")
case .Monday:
    print("星期一")
case .TUESDAY:
    print("星期二")
case .WEDNESDAY:
    print("星期三")
case .THURSDAY:
    print("星期四")
case .FRIDAY:
    print("星期五")
case .Saturday:
    print("星期六")
}

La sortie de l'exécution du programme ci-dessus est :

Thursday

Les valeurs définies dans une énumération (telles queSunday,Monday,……etSaturday) sont lesvaleurs membresde cette énumération (oumembres)。caseLe mot-clé indique qu'une nouvelle ligne de valeurs membres sera définie.

Remarque : Contrairement à C et Objective-C, les membres d'énumération de Swift ne se voient pas attribuer de valeur entière par défaut lors de leur création. Dans l'exempleDaysofaWeekci-dessus,Sunday,Monday,……etSaturdayne seront pas implicitement attribués comme0,1,……et6. Au lieu de cela, ces membres d'énumération ont eux-mêmes des valeurs complètes, qui sont déjà bien définiesDaysofaWeektype.

var weekDay = DaysofaWeek.THURSDAY 

weekDayLe type peut être déduit lorsqu’il estDaysofaWeekinitialisé avec l’une de ses valeurs possibles. Une foisweekDaydéclaré comme unDaysofaWeek, vous pouvez utiliser une syntaxe abrégée (.) pour lui attribuer une autreDaysofaWeekvalue:

var weekDay = .THURSDAY 

QuandweekDayLorsque le type est connu, vous pouvez omettre le nom de l’énumération lorsque vous lui attribuez à nouveau une valeur. L’utilisation de valeurs d’énumération explicitement typées peut rendre le code plus lisible.

Les énumérations peuvent être divisées en valeurs associées et valeurs brutes.

Différence entre les valeurs associées et les valeurs brutes

Valeurs associées Valeurs brutes
Différents types de données Même type de données
Exemple : enum {10,0.8,"Hello"} Exemple : enum {10,35,50}
Les valeurs sont créées à partir de constantes ou de variables Valeurs pré-remplies
Les valeurs associées ne sont définies que lorsque vous créez une nouvelle constante ou variable basée sur un membre d'énumération, et chaque fois que vous le faites, sa valeur peut être différente. Les valeurs brutes sont toujours les mêmes

Valeurs associées

Dans l'exemple suivant, nous définissons un type d'énumération nommé Student, qui peut être une chaîne (String) pour Name, ou une valeur associée (Int, Int, Int) pour Mark.

import Cocoa

enum Student{
    case Name(String)
    case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Example")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
    print("学生的名字是: \(studName)。")
case .Mark(let Mark1, let Mark2, let Mark3):
    print("学生的成绩是: \(Mark1),\(Mark2),\(Mark3)。")
}

La sortie de l'exécution du programme ci-dessus est :

学生的成绩是: 98,97,95.

Valeurs brutes

Les valeurs brutes peuvent être des chaînes, des caractères, ou toute valeur entière ou à virgule flottante. Chaque valeur brute doit être unique dans sa déclaration d'énumération.

Pour les énumérations avec des valeurs brutes entières, vous n'avez pas besoin d'attribuer explicitement une valeur à chaque membre ; Swift attribuera automatiquement les valeurs pour vous.

Par exemple, lorsque des entiers sont utilisés comme valeurs brutes, les valeurs implicitement attribuées augmentent de 1 en séquence. Si la première valeur ne reçoit pas de valeur initiale, elle sera automatiquement définie sur 0.

import Cocoa

enum Month: Int {
    case January = 1, February, March, April, May, June, July, August, September, October, November, December
}

let yearMonth = Month.May.rawValue
print("数字月份为: \(yearMonth)。")

La sortie de l'exécution du programme ci-dessus est :

数字月份为: 5.
Autres extensions