📅  最后修改于: 2020-12-25 04:32:26             🧑  作者: Mango
枚举是用户定义的数据类型,由一组相关值组成。关键字枚举用于定义枚举数据类型。
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")
}
当我们使用游乐场运行上述程序时,我们得到以下结果-
Welcome to Closures
Swift 4枚举不会为其成员分配默认值,例如C和ObjectiveC。而是通过其枚举名称显式定义成员。枚举名称应以大写字母开头(例如:枚举DaysofaWeek)。
var weekDay = DaysofaWeek.Sunday
在这里,枚举名称“ DaysofaWeek”被分配给一个可变的工作日。它通知编译器,属于星期日的数据类型将分配给该特定类的后续枚举成员。定义枚举成员数据类型后,可以通过传递值和进一步的计算来访问成员。
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")
}
当我们使用游乐场运行上述程序时,我们得到以下结果-
Climate is Cold
该程序首先将“气候”定义为枚举名称。然后,其成员(例如“印度”,“美国”,“非洲”和“澳大利亚”)被宣布为“气候”类。现在,成员America被分配给Season Variable。此外,Switch case将看到对应于.America的值,并将分支到该特定语句。输出将显示为“ Climate is Cold”。同样,可以通过switch语句访问所有成员。当不满足条件时,默认情况下将打印“气候不可预测”。
枚举可以进一步分为关联值和原始值。
Associated Values | Raw Values |
Different Datatypes | Same Datatypes |
Ex: enum {10,0.8,”Hello”} | Ex: enum {10,35,50} |
Values are created based on constant or variable | Prepopulated Values |
Varies when declared each time | Value for member is same |
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).")
}
当我们使用游乐场运行上述程序时,我们得到以下结果-
Student Marks are: 98,97,95.
考虑以访问学生的姓名为例,并在三个主题中获得保护的标记被枚举,将枚举名称声明为学生,枚举类中存在的成员是属于字符串数据类型的名称,标记分别表示为数据类型Integer的mark1,mark2和mark3。访问学生姓名或他们已经打分的分数
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
现在,如果执行了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).")
当我们使用游乐场运行上述程序时,我们得到以下结果-
Value of the Month is: 5.