Swift 如何最好地使用嵌套枚举创建Uno卡和卡组

Swift 如何最好地使用嵌套枚举创建Uno卡和卡组,swift,enums,Swift,Enums,我正在尝试创建一个简单的Uno纸牌游戏版本,首先创建一个card()对象数组来组成Deck(),其中包括initializeDeck()和shuffleDeck()等实例方法 我不熟悉枚举,似乎找不到有效使用它们的信息,无法根据每种可能的组合中的两种(每对零中减去一种)创建和分配具有颜色和面值的Card()对象。这甚至可能不是最有效的方法,但我的想法如下: struct Card { enum color: String { case r

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

我不熟悉枚举,似乎找不到有效使用它们的信息,无法根据每种可能的组合中的两种(每对零中减去一种)创建和分配具有颜色和面值的Card()对象。这甚至可能不是最有效的方法,但我的想法如下:

struct Card {
        
        enum color: String {
            case red = "Since Swift 4.2 you can use 
CaseIterable
to get an array of all enum cases.

Simply change your enums to conform to the protocol:

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

enum faceValue: String, CaseIterable {
    // ...
}
结构卡{ 枚举颜色:字符串{
case red=“自Swift 4.2以来,您可以使用
caseitrable
获取所有枚举案例的数组

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

for color in color.allCases {
    for faceValue in faceValue.allCases {
        Deck.append(Card(color: color, faceVal: faceValue))
    }
}
并执行双for循环:


此外,结构、枚举和类的名称应该以大写字母开头,这样可以是
Color
FaceValue
Card
;而属性和变量应该以小写字母开头,这样就可以看到名称是类名还是变量名自Swift 4.2以来,您可以使用
caseitrable
获取所有枚举案例的数组

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

for color in color.allCases {
    for faceValue in faceValue.allCases {
        Deck.append(Card(color: color, faceVal: faceValue))
    }
}
并执行双for循环:


此外,结构、枚举和类的名称应该以大写字母开头,这样可以是
Color
FaceValue
Card
;而属性和变量应该以小写字母开头,这样就可以看到名称是类名还是变量名很抱歉。

谢谢您的帮助!我已经更正了您解释的大小写并定义了double for in循环,可能是在卡结构中,因为您无法访问“color.allCases”中的“color”。否则(?)-但是,我收到一个引用为“1”的“Expect declaration error”。在“Card”的声明中。编辑:我试图更新你的帖子,虽然我没有足够的声誉这么做。你仍然需要在你的Card结构中定义属性,仅仅在其中定义枚举是不够的。你应该添加
let faceValue:FaceVvalue
让color:color
在你的卡片结构中,那么这个代码应该可以工作。为了简单起见,我假设你在你的问题中省略了它。你不知道我只是Swift&XCode的一个痛苦的新手,lol-我感谢你的帮助!我不确定例如枚举'color'是否分配了一个大小写,比如说“green”“.lol,没问题,这就是我们在这里的原因。您可以在(枚举页面链接)中找到有关枚举、声明和其他一切的更多信息。”感谢您的帮助!我已经更正了您解释的大小写并定义了double for in循环,可能是在Card结构中,因为您无法访问“color.allCases”中的“color”。否则(?)-但是,我收到一个引用为“1”的“Expect declaration error”。在“Card”的声明中。编辑:我试图更新你的帖子,虽然我没有足够的声誉这么做。你仍然需要在你的Card结构中定义属性,仅仅在其中定义枚举是不够的。你应该添加
let faceValue:FaceVvalue
让color:color
在你的卡片结构中,那么这个代码应该可以工作。为了简单起见,我假设你在你的问题中省略了它。你不知道我只是一个痛苦的Swift&XCode新手,哈哈-我感谢你的帮助!我不确定例如枚举'color'是否分配了一个大小写,比如说“green”.lol,没问题,这就是我们在这里的原因。您可以在(指向枚举页面的链接)中找到有关枚举、声明和其他一切的更多信息