- 快速教程
- 斯威夫特 - 主页
- 斯威夫特 - 概述
- Swift - 环境
- Swift - 基本语法
- Swift - 数据类型
- Swift - 变量
- Swift - 可选
- Swift - 元组
- Swift - 常量
- Swift - 文字
- Swift - 运算符
- Swift - 决策
- Swift - 循环
- Swift - 字符串
- 斯威夫特 - 角色
- Swift - 数组
- Swift - 套装
- 斯威夫特 - 字典
- Swift - 函数
- Swift - 闭包
- Swift - 枚举
- Swift - 结构
- Swift - 类
- Swift - 属性
- Swift - 方法
- Swift - 下标
- Swift - 继承
- Swift - 初始化
- Swift - 去初始化
- Swift - ARC 概述
- Swift - 可选链接
- Swift - 类型转换
- Swift - 扩展
- Swift - 协议
- Swift - 泛型
- Swift - 访问控制
- 斯威夫特有用的资源
- Swift - 在线编译
- Swift - 快速指南
- Swift - 有用的资源
- 斯威夫特 - 讨论
Swift - 枚举
枚举是用户定义的数据类型,由一组相关值组成。关键字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 .India: 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 定义为枚举名称。然后它的成员如“印度”、“美国”、“非洲”和“澳大利亚”被声明属于“气候”类。现在,成员 America 被分配到季节变量。此外,Switch case 将看到与 .America 相对应的值,并将分支到该特定语句。输出将显示为“气候寒冷”。同样,所有成员都可以通过 switch 语句访问。当条件不满足时,默认打印“气候不可预测”。
枚举可以进一步分为关联值和原始值。
关联值和原始值之间的差异
相关值 | 原始值 |
不同的数据类型 | 相同的数据类型 |
例如:枚举 {10,0.8,"Hello"} | 例如:枚举 {10,35,50} |
值是基于常量或变量创建的 | 预填充值 |
每次声明时有所不同 | 会员价值相同 |
具有关联值的枚举
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.
例如,考虑访问在三个科目中保护的学生姓名和分数,枚举名称被声明为学生,枚举类中存在的成员是属于字符串数据类型的名称,分数表示为数据类型 Integer 的 mark1、mark2 和 mark3。访问学生姓名或他们的分数
var studDetails = Student.Name("Swift") var studMarks = Student.Mark(98,97,95)
现在,如果执行该 case 块,则 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.