// 列举 enum 类型
// 假设我们有这样一个需求,通过对于一副扑克牌的花色和牌面大小的 enum 类型,凑出一套不含大小王的扑克牌的数组
// 定义如下
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)
}
}
}
// 需要两个 for 循环,前提是拿到每一个枚举的所有值的集合
// 声明一个协议,协议中有一个静态只读属性,一个包含自己类型的数组
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]
}
}
// 然后就可以快乐的遍历了
for suit in Suit.allValues {
for rank in Rank.allValues {
print("\(suit.rawValue)\(rank)")
}
}