将嵌套的递归枚举案例用作父枚举案例

时间:2018-07-05 19:32:02

标签: arrays swift types enums type-conversion

在流行的棋盘游戏 Monopoly 中,玩家有机会购买/交易不同的房产,当他们垄断某个街区时,便可以建造房屋。我试图将所有这些属性表示为Swift中的嵌套枚举,但是当涉及在Array中表示玩家的属性时,我感到很困惑。

这是我到目前为止尝试过的。

enum Property {
    enum Brown {
        case mediterranean, baltic
    }

    enum LightBlue {
        case oriental, vermont, connecticuit
    }

    enum pink {
        case stCharles, states, virginia
    }
    ...
}

var properties: [Property] = [
    Property.Brown.baltic, // ERROR: Cannot convert value of type 'Property.Brown' to expected element type 'Property'
    Property.Brown.mediterranean
]

如您所见,我无法将这些属性存储在[Property]数组中,因为Property.Brown不是属性(可理解)。我需要更改什么才能将Property.<Insert Neighborhood Here>存储在数组中?我知道[任何人]都可以使用,但是我担心类型安全,所以这不起作用。

编辑PDT 2018年7月5日13:18 我正在编写一个程序,该程序将充当“大富翁”游戏的银行,并且需要一种方法来确定哪些玩家(或银行)拥有财产。我目前正在操场和制作原型,以找出对我有用的东西。

1 个答案:

答案 0 :(得分:2)

如您所知

  

因为是财产。布朗不是财产(可理解)。

您可能需要Property.BrownProperty. LightBlue,...

公用的类型

也许您可以使用仅用于将它们存储在Array中的协议:

protocol PropertyEnums {}

enum Property {
    enum Brown: PropertyEnums {
        case mediterranean, baltic
    }

    enum LightBlue: PropertyEnums {
        case oriental, vermont, connecticuit
    }

    //...
}

var properties: [PropertyEnums] = [
    Property.Brown.baltic,
    Property.Brown.mediterranean,
    //...
]

但是我不确定这是否是最适合您的解决方案,因为您没有展示properties的用例。


对于某些用例,这样的事情可能会更好:

enum Property {
    enum Brown {
        case mediterranean, baltic
    }

    enum LightBlue {
        case oriental, vermont, connecticuit
    }

    //...

    case brown(Brown)
    case lightBlue(LightBlue)
    //...
}

var properties: [Property] = [
    .brown(.baltic),
    .brown(.mediterranean),
    //...
]

请告诉我们您要如何使用properties