在流行的棋盘游戏 Monopoly 中,玩家有机会购买/交易不同的属性(property),当他们垄断某个街区时,他们可以 build 房屋。我试图在 Swift 中将所有这些属性表达为嵌套枚举,但是当谈到在数组中表达玩家的属性时,我感到很困惑。
这是我到目前为止尝试过的方法。
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>
在数组中?我知道 [Any] 可以,但我担心类型安全,所以这行不通。
编辑 2018 年 7 月 5 日,13:18 PDT 我正在编写一个程序,它将充当大富翁游戏的银行,并且需要一种方法来确定哪些玩家(或银行)拥有属性(property)。我目前正在 Playground 和原型(prototype)设计中找出适合我的方法。
最佳答案
众所周知,
because a Property.Brown isn't a Property (understandable).
您可能需要您的 Property.Brown
、Property 共有的类型。淡蓝色
, ...
也许你可以使用一个协议(protocol)来将它们存储在一个数组中:
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),
//...
]
请告诉我们您希望如何使用您的属性
。
关于arrays - 使用嵌套的 decended 枚举案例作为父枚举案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51198636/