枚举是用户定义的数据类型,由一组相关值组成。 关键字enum
用于定义枚举数据类型。
枚举功能
Swift 4中的枚举也类似于C语言和Objective C的结构。
- 它在类中声明,并且通过该类的实例访问其值。
- 使用枚举初始化器定义初始成员值。
- 通过确保标准协议功能,还可以扩展其功能。
语法
使用enum
关键字引入枚举,并将其整个定义放在一对括号中 -
enum enumname {
// enumeration values are described here
}
例如,可以按如下方式定义星期几的枚举 -
enum DaysofaWeek {
case Sunday
case Monday
---
case Saturday
}
示例代码
enum names {
case Swift
case Closures
}
var lang = names.Closures
lang = .Closures
switch lang {
case .Swift:
print("Welcome to Swift")
case .Closures:
print("Welcome to Closures")
default:
print("Introduction")
}
当使用playground运行上述程序时,得到以下结果 -
Welcome to Closures
Swift 4枚举不会像C语言和Objective C那样为其成员分配默认值。它的成员由枚举名称显式定义。 枚举名称应以大写字母开头(例如:enum DaysofaWeek
)。
var weekDay = DaysofaWeek.Sunday
这里枚举名称DaysofaWeek
分配给变量weekday.Sunday
。 它通知编译器数据类型属于Sunday
将被分配给该特定类的后续枚举成员。 当定义了枚举成员数据类型,就可以通过传递值和进一步计算来访问成员。
使用Switch语句进行枚举
Swift 4的’switch’语句也遵循多路选择。 根据指定的条件,在特定时间仅访问一个变量。 switch
语句中的默认情况用于捕获未指定的情况。示例代码 -
enum Climate {
case India
case America
case Africa
case Australia
}
var season = Climate.America
season = .America
switch season {
case .China:
print("Climate is Hot")
case .America:
print("Climate is Cold")
case .Africa:
print("Climate is Moderate")
case .Australia:
print("Climate is Rainy")
}
当使用playground运行上述程序时,得到以下结果 -
Climate is Cold
上面程序首先将Climate
定义为枚举名称。 然后,它的成员如:China
,America
,Africa
和Australia
,声明属于Climate
类。 现在,America
成员被分配到season
变量。 此外,Switch case
将比较.America
相对应的值,它将分支到该特定语句。 输出将显示为Climate is Cold
。 同样,可以通过switch
语句访问所有成员。 当条件不满足时,默认打印Climate is not predictable
。
枚举可以进一步分类为关联值和原始值。
关联值与原始值的区别
关联值 | 原始值 |
---|---|
不同的数据类型 | 相同的数据类型 |
例如:enum {10,0.8,"Hello"} |
例如:enum {1, 20, 99, 1999} |
值基于常量或变量创建 | 预先填充的值 |
每次声明时都会变化 | 成员值相同 |
具有相关值的枚举
enum Student {
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift 4")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
print("Student name is: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
}
当使用playground运行上述程序时,得到以下结果 -
Student Marks are: 98,97,95.
例如,考虑访问三个科目的学生姓名和分数,枚举名称声明为Student
,枚举类中的成员Name
是属于字符串数据类型,Mark
表示为整数类型的:mark1
,mark2
和mark3
。 访问学生姓名或分数代码如下 -
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
现在,如果执行代码块,则switch case
将打印学生姓名和分数。 否则如果两个条件都失败,则将执行默认块。
具有原始值的枚举
原始值可以是字符串,字符或任何整数或浮点数类型。 每个原始值在其枚举声明中必须是唯一的。 当整数用于原始值时,如果没有为某些枚举成员指定值,则它们会自动递增。参考以下示例代码 -
enum Month: Int {
case January = 1, February, March, April, May, June, July, August,
September, October, November, December
}
let yearMonth = Month.May.rawValue
print("Value of the Month is: \(yearMonth).")
当使用playground运行上述程序时,得到以下结果 -
Value of the Month is: 5.