É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'exemple
DaysofaWeekci-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