如何最好地创建带有嵌套枚举的Uno卡组



我试图创建一个简单版本的Uno纸牌游戏,首先创建一个Array of card((对象来组成Deck((,其中包括initializeDeck((和shuffleDeck(((等实例方法。

我是枚举的新手,似乎找不到有效使用它们的信息,无法创建和分配一个具有颜色和faceValue的Card((对象,该对象基于每种可能的组合中的两个(每对零减去一个(。这甚至可能不是最有效的方法,但我的想法是:

struct Card {

enum color: String {
case red = "🔴"
case blue = "🔵"
case yellow = "🟡"
case green = "🟢"
}

enum faceValue: Int {
case zero = 0
case one = 1
case two = 2
case three = 3
case four = 4
case five = 5
case six = 6
case seven = 7
case eight = 8
case nine = 9
}

}

在这个Struct声明之后,我将创建一个循环,比如

// Main
var Deck: [Cards] = []
for _ in 0...96 {
Deck.append(Card(color: "iterate through four colors for every one faceVal twice (except for zero; only once)", faceVal "iterate through 0...9 (for every color)"))
}

虽然,我不太确定这就是初始化颜色的嵌套枚举(在Card结构中(的方式;faceVal。除此之外,我不确定您将如何通过它们来管理索引(?(,以将每个颜色分配给每个faceVal。

任何帮助都将不胜感激!

我也刚刚熟悉CustomStringConvertible,想知道这是否可以以某种方式工作?

提前感谢

由于Swift 4.2,您可以使用CaseIterable来获取所有枚举用例的数组。

只需更改您的枚举以符合协议:

enum color: String, CaseIterable {
// ...
}
enum faceValue: String, CaseIterable {
// ...
}

并执行双重循环:

for color in color.allCases {
for faceValue in faceValue.allCases {
Deck.append(Card(color: color, faceVal: faceValue))
}
}

此外;structs、enum和类的名称应该以大写字母开头,因此应该是ColorFaceValueCard;而属性和变量应该以小写字母开头,所以应该是deck。通过这种方式,您可以很容易地查看名称是类名还是变量名。

最新更新