Swift枚举

1、枚举的定义
枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值。

每个枚举定义了一个全新的类型。像 Swift 中其他类型一样,它们的名字(例如 CompassPoint 和 Planet)必须以一个大写字母开头。给枚举类型起一个单数名字而不是复数名字,以便于读起来更加容易理解。

2、枚举的语法
使用  enum 关键词并且把它们的整个定义放在一对大括号内。
enum SomeEumeration {
 // enumeration definition goes here  
}

例如:一个枚举中被定义的值(例如 North,South,East 和 West)是枚举的成员值。 case 关键词表明新的一行成员值将被定义。
enum CompassPoint {
   
 case North
   
 case South
   
 case East
   
 case West
}


3、定义多个成员值
多个成员值可以出现在同一行上,用逗号隔开。
enum Planet {
   
 case Mercury, Venus, Earth, Mars, Jupiter
}


4、使用枚举
var directionToHead = CompassPoint.West

directionToHead 的类型被推断当它被 CompassPoint 的一个可能值初始化。一旦 directionToHead 被声明为一个 CompassPoint,你可以使用更短的点(.)语法将其设置为另一个 CompassPoint 的值。

directionToHead = .East

directionToHead 的类型已知时,当设定它的值时,你可以不再写类型名。

5、switch 和 匹配枚举值
var str1:String
switch directionToHead {
   
 case .North:
       
 str1 = "Lots of planets have a north"
   
 case .South:
       
 str1 = "Watch out for penguins"
   
 case .East:
       
 str1 = "Where the sun rises"
   
 case .West:
       
 str1 = "Where the skies are blue"
}


正如在控制流中介绍, 当考虑一个枚举的成员们时,一个 switch 语句必须全面。如果忽略了.West 这种情况,上面那段代码将无法通过编译,因为它没有考虑到 CompassPoint 的全部成员。 全面性的要求确保了枚举成员不会被意外遗漏

当不需要匹配每个枚举成员的时候,你可以提供一个默认 default 分支来涵盖所有未明确被提出的任何成员。

6、关联值(Associated Values)
假设一个库存跟踪系统需要利用两种不同类型的条形码来跟踪商品。有些商品上标有 UPC-A 格式的一维码,它使用数字 0 到 9。其他商品上标有 QR 码格式的二维码,它可以使用任何 ISO8859-1 字符。

enum Barcode {
   
 case UPCA(Int, Int, Int)
   
 case QRCode(String)
}


以上可以理解为定义一个名为 Barcode 的枚举类型,它可以是 UPCA 的一个关联值(Int,Int,Int),或者QRCode 的一个字符串类型(String)关联值。

然后可以使用任何一种条码类型创建新的条码,如:
var productBarcode = Barcode.UPCA(8, 85909_51226, 3)

同一个商品还可以被分配一个不同类型的条形码:
productBarcode = .QRCode("ABCDEFGHIJKLMNOP")

可以使用一个 switch 语句来检查,关联值可以被提取作为 switch 语句的一部分。你可以在 switch 的 case 分支代码中使用一个常量(用 let 前缀)或者作为一个变量(用 var 前缀)来提取关联值

var  str2: String
switch  productBarcode  {
   
  case  .UPCA( let  numberSystem,  let  identifier,  let  check):
       
  str2  =  "UPC-A with value of  \(numberSystem) ,  \(identifier) \(check) ."
   
   
  case  .QRCode( let  productCode):
       
  str2  =  "QR code with value of  \(productCode) ."
}


如果一个枚举成员的所有关联值被提取为常量,或者它们全部被
0
0
 
 

你可能感兴趣的:(apple,mac,swift)