swift枚举类型 – Swift最新教程

上一章Swift教程请查看:swift函数定义和使用

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

枚举类型的功能

Swift中的枚举也类似于C和Objective
C的结构。

  • 它在一个类中声明,它的值通过该类的实例访问。
  • 初始成员值是使用枚举初始化器定义的。
  • 通过确保标准协议功能,它的功能也得到了扩展。

语法

枚举是用enum关键字引入的,并将它们的整个定义放在一对大括号中

enum enumname {
    // 这里是枚举值
 }

例如,你可以定义一周中的几天的枚举,如下所示:

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")
 }

Swift枚举不像C和Objective
C那样赋值给它的成员默认值,而是通过它们的枚举名显式定义成员。枚举名称应该以大写字母开头(例如:enum DaysofaWeek)。

var weekDay = DaysofaWeek.Sunday 

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

使用Switch语句枚举

Swift“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定义为枚举名称。然后它的成员被声明属于“Climate”类。现在成员America被分配到一个季节变量。此外,Switch case将看到与. america对应的值,它将分支到该特定语句。输出将显示为“Climate is Cold”。同样,可以通过switch语句访问所有成员。当条件不满足时,它默认打印“气候不可预测”。

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

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

相关的值 原始值
不同的数据类型 相同的数据类型
例如: enum {10,0.8,”Hello”} 例如: enum {10,35,50}
值是基于常量或变量创建的 值填充
每次声明时都不同 成员的值是相同的

具有关联值的枚举

enum Student {
    case Name(String)
    case Mark(Int,Int,Int)
 }
 
 var studDetails = Student.Name("Swift")
 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).")
 }

例如,考虑访问三个subject中受保护的学生名和标记,枚举名声明为student, enum类中出现的成员名称属于字符串数据类型,标记表示为数据类型为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("Month is: \(yearMonth).")
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?