在流行的棋盘游戏 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 我正在编写一个程序,该程序将充当“大富翁”游戏的银行,并且需要一种方法来确定哪些玩家(或银行)拥有财产。我目前正在操场和制作原型,以找出对我有用的东西。
答案 0 :(得分:2)
如您所知
因为是财产。布朗不是财产(可理解)。
您可能需要Property.Brown
,Property. 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
。