枚举是用户定义的数据类型,由一组相关值组成。 关键字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
将被分配给该特定类的后续枚举成员。 当定义了枚举成员数据类型,就可以通过传递值和进一步计算来访问成员。
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.