Swift 枚举
枚举是一个用户定义的数据类型,由一组相关的值组成。关键字 enum 用于定义枚举数据类型。
枚举功能
Swift 4中的枚举也类似于C和Objective C的结构。
- 它在类中声明,并且通过该类的实例访问其值。
-
初始成员值是使用enum初始化程序定义的。
-
它的功能还通过确保标准协议功能来扩展。
语法
枚举使用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定义为枚举名称。然后它的成员如’India’、’America’、’Africa’和’Australia’被声明为属于’Climate’类。现在成员America被分配给了一个Season变量。进一步,Switch case将查看与.America对应的值,并将分支到该特定语句。输出将显示为”Climate is Cold”。同样,所有成员都可以通过switch语句进行访问。当条件不满足时,默认打印”Climate is not predictable”。
枚举可以进一步分类为关联值和原始值。
关联值和原始值之间的区别
关联值 | 原始值 |
---|---|
不同的数据类型 | 相同的数据类型 |
示例:enum {10,0.8,”你好”} | 示例:enum {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.
例如,考虑访问学生的姓名和在三个科目中取得的分数,枚举名称声明为student,枚举类中的成员是属于字符串数据类型的name,分数表示为mark1、mark2和mark3,数据类型为整数。要访问学生的姓名或分数,可以使用如下方式:
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
现在,如果执行了该case块,switch语句将打印学生的姓名,否则它将打印学生的分数。如果两个条件都不满足,将执行默认的block。
带有原始值的枚举
原始值可以是字符串、字符或任何整数或浮点数类型中的一个。每个原始值在枚举声明中必须是唯一的。当使用整数作为原始值时,如果某些枚举成员没有指定值,它们会自动递增。
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.