枚举是由用户定义的数据类型的一组相关值。关键字 enum 用来定义枚举数据类型。
枚举功能
枚举在 swift 也类似于 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: println("Welcome to Swift") case .Closures: println("Welcome to Closures") default: println("Introduction") }
Welcome to Closures
Swift 中的枚举不象 C 和 Objective C 分配其成员的默认值,相反,成员由它们枚举名称明确定义。枚举名称应该使用大写字母(例如:enum DaysofaWeek)。
var weekDay = DaysofaWeek.Sunday
枚举与Switch语句
Swift 中的 'Switch' 语句也遵循了多路选择。 只有一个变量被以基于指定的条件的特定时间访问。默认情况下,在switch语句用于捕获不确定的情况(case)。
enum Climate{ case India case America case Africa case Australia }var season = Climate.America season = .America switch season { case .India: println("Climate is Hot") case .America: println("Climate is Cold") case .Africa: println("Climate is Moderate") case .Australia: println("Climate is Rainy") default: println("Climate is not predictable") }
Climte is Cold
该程序首先定义了Climate 作为枚举名称。那么它的成员如, 'China', 'America', 'Africa' 和 'Australia' 声明属于类 'Climate'. 现在成员 America 被分配到一个 Season 变量。此外,Switch case可以找到对应 .America 的值,并跳转到该特定语句。 输出将显示为 “Climate is Cold”。同样,所有成员可以通过 switch 语句访问。 当条件不满足它打印默认内容 'Climate is not predictable'
枚举可进一步划分到相关的值和原始值。
关联值和原始值之间的差异
枚举与关联值
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): println("Student name is: \(studName).") case .Mark(let Mark1, let Mark2, let Mark3): println("Student Marks are: \(Mark1),\(Mark2),\(Mark3).") default: println("Nothing") }
Swift 98 97 95
例如,考虑访问学生的名字和标记固定在三个科目枚举名称被声明为 student ,而在枚举类中的成员名称都属于字符串数据类型,标记表示为 mark1, mark2 和 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 println("Value of the Month is: \(yearMonth).")
Value of the Month is: 5.