// 列舉 enum 類(lèi)型
// 假設(shè)我們有這樣一個(gè)需求,通過(guò)對(duì)于一副撲克牌的花色和牌面大小的 enum 類(lèi)型,湊出一套不含大小王的撲克牌的數(shù)組
// 定義如下
enum Suit: String {
case spades? ? = "黑桃"
case hearts? ? = "紅桃"
case clubs? ? ? = "梅花"
case diamonds? = "方片"
}
enum Rank: Int, CustomStringConvertible {
case ace = 1
case two, three, four, five, six, seven, eight, nine, ten
case jack, queen, king
var description: String {
switch self {
case .ace:
return "A"
case .jack:
return "J"
case .queen:
return "Q"
case .king:
return "K"
default:
return String(self.rawValue)
}
}
}
// 需要兩個(gè) for 循環(huán),前提是拿到每一個(gè)枚舉的所有值的集合
// 聲明一個(gè)協(xié)議,協(xié)議中有一個(gè)靜態(tài)只讀屬性,一個(gè)包含自己類(lèi)型的數(shù)組
protocol EnumeratabelEnum {
static var allValues: [Self] { get }
}
extension Suit: EnumeratabelEnum {
static var allValues: [Suit] {
return [.spades, .hearts, .clubs, .diamonds]
}
}
extension Rank: EnumeratabelEnum {
static var allValues: [Rank] {
return [.ace, .two, .three, .four, .five, .six, .seven, .eight, .nine, .ten, .jack, .queen, .king]
}
}
// 然后就可以快樂(lè)的遍歷了
for suit in Suit.allValues {
for rank in Rank.allValues {
print("\(suit.rawValue)\(rank)")
}
}