enum and struct
和方法一样 在swift 使用关键字enum + name 来创建一个枚举,并且枚举被作为一类(first-class),可以实例方法,计算属性,创建构造函数等等
enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription() -> String {
switch self {
case .Ace:
return "ace"
case .Jack:
return "jack"
case .Queen:
return "queen"
case .King:
return "king"
default:
return String(self.rawValue)
}
}
}
let ace = Rank.Ace
let aceRawValue = ace.rawValue
在swift里枚举并不像OC那样会按照顺序自动分配一个初始值,不过可以手动去赋一个初始值
rawValue方法可以来获取枚举成员的初始值,在上面的例子里 当你定义了一个Int类型是初始值时,其余的值会按顺序自动被分配。你也可以使用string,float或者字符集 来指定一个枚举的初始值类型 。并且一个初始值在枚举中必须是唯一的
通过rawValue来获取对应的枚举值
if let convertedRank = Rank(rawValue: 3) {
let threeDescription = convertedRank.simpleDescription()
}
如果在一组枚举中你并不需要一个初始值的话,你可以不用去定义
enum Suit {
case Spades, Hearts, Diamonds, Clubs
func simpleDescription() -> String {
switch self {
case .Spades:
return "spades"
case .Hearts:
return "hearts"
case .Diamonds:
return "diamonds"
case .Clubs:
return "clubs"
}
}
}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()
另外从上面的例子我们看到 当一个对象类型已经知道时,可以使用.来缩写类,比如 switch 的其实是一个Suit 对象时 就可以使用 .Hearts .Diamonds
再要注意一点当你在枚举里使用switch控制流时必须涵盖所有枚举情况,不然编译器会报错 ,如果你不需要去匹配所有是时候 需要去指定一个default分支