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")
    }
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    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")
       
    }
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    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).")
    }
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    Student Marks are: 98,97,95.
    
    例如,考虑访问学生姓名和三个科目中保护的标记,枚举名称声明为学生,枚举类中的成员是属于字符串数据类型的名称,标记表示为数据类型为整数的 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).")
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    Value of the Month is: 5.