arrays - 使用嵌套的 decended 枚举案例作为父枚举案例

标签 arrays swift types enums type-conversion

在流行的棋盘游戏 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.BrownProperty 共有的类型。淡蓝色, ...

也许你可以使用一个协议(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/

相关文章:

ios - Swift:无法使用类型的参数列表调用 'append'

Swift - 解析查询 whereKey 包含

ios - 无法在我的音乐播放器应用程序上播放音乐

JavaScript 构造函数参数类型

java - 从 strings.xml 添加字符串到 ArrayList

java - 在java中创建数组时可以省略rowsize吗?

python - 值错误: setting an array element with a sequence when using feed_dict in TensorFlow

arrays - 将指针数组复制到设备内存并返回(CUDA)

ios - 如何在实例方法中调用类型方法

c - 在 C 中读取和转换枚举类型