Swift-枚举

枚举是一种用户定义的数据类型,由一组相关值组成。关键字枚举用于定义枚举数据类型。

枚举功能

Swift 4 中的枚举也类似于 C 和目标 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 和目标 C 那样为其成员分配默认值。相反,成员由其枚举名称显式定义。枚举名称应以大写字母开头(例如:枚举 DaysofaWeek)。

var weekDay = DaysofaWeek.Sunday 

在这里,枚举名称“DaysofaWeek”被分配给一个可变的工作日。星期日。它通知编译器,属于 Sunday 的数据类型将分配给该特定类的后续枚举成员。定义枚举成员数据类型后,可以通过传递值和进一步计算来访问成员。

使用开关语句进行枚举

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

该程序首先将气候定义为枚举名称。然后,其成员如“印度”,“美洲”,“非洲”和“澳大利亚”被宣布属于“气候”类。现在,成员美洲被分配到一个季节变量。此外,开关大小写将看到对应于 的值。美国,它将分支到那个特定的声明。输出将显示为“气候寒冷”。同样,所有成员都可以通过 switch 语句访问。当条件不满足时,默认情况下会打印“气候不可预测”。

枚举可以进一步分类为关联值和原始值。

关联值和原始值之间的差异

关联值 原始值
不同的数据类型 相同的数据类型
例如:enum {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.

例如,考虑访问学生姓名和标记保护在三个主题枚举名称被声明为学生,枚举类中存在的成员是属于字符串数据类型的名称,标记表示为数据类型为整数的标记1,标记2和mark3。访问学生姓名或分数

var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)

现在,如果执行该案例块,开关大小写将打印学生姓名,否则它将打印学生保护的标记。如果两个条件都失败,则将执行默认块。

具有原始值的枚举

原始值可以是字符串、字符或任何整数或浮点数字类型。每个原始值在其枚举声明中必须是唯一的。当整数用于原始值时,如果没有为某些枚举成员指定值,则整数会自动递增。


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.