使用enum
关键字创建枚举类型。与类类似,枚举类型中一样可以定义方法。
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.toRaw())
}
}
}
let ace = Rank.Ace
let aceRawValue = ace.toRow()
试验
编写一个函数用来比较两个Rank
枚举值
在上面的代码中,枚举类型的原始值是Int
类型,定义的时候只明确了第一个,后面的依次递增。当然也可以使用浮点数或者字符串作为枚举类型的值。
使用toRaw
和fromRaw
可以在枚举类型和原始值之间进行转换。
if let convertedRank = Rank.fromRaw(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()
试验
给Suit
添加一个color
方法,当枚举值为Spades
或者Clubs
的时候返回”black”,否则返回”red”。
每个枚举成员都可以关联一些值。同一个枚举类型的实例成员都能够关联不同的值。在创建枚举类型的实例时可以给枚举成员关联上一些值。关联的值与原始的值不一样:同一个枚举类型的所有成员中,原始值都是一样的,在定义枚举类型的时候就已经确定了。
例如从服务器上获取日落和日出的实际。服务器会返回正确的信息或者出错。
enum ServerResponse {
case Result(String, String)
case Error(String)
}
let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese")
switch success {
case let .Result(sunrise, sunset):
let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
case let .Error(error):
let serverResponse = "Failure... \(error)"
}
试验
给ServerResponse
的switch
添加第三个case
分支。