列举 enum 类型

// 列举 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)")

}

}

你可能感兴趣的:(列举 enum 类型)