【发布时间】:2016-06-21 09:08:43
【问题描述】:
我正在为我的库 (https://github.com/JiriTrecak/Warp) 进行 Enum 序列化工作,并且在将枚举类型存储在属性中时几乎没有遇到任何困难(我需要知道该类型,以便可以按需对其进行序列化/反序列化)。
我有一个结构,其中包含您可以拥有的所有属性的描述,包括它们的类型、远程键等,如果它是枚举,我想再存储一个可选信息,它是 Enum 类型在找到密钥时创建(例如,性别)。
我试过两种方法,都不能用:
A) 在容器定义中声明泛型类型
public struct WRPProperty<T: RawRepresentable> {
var enumType : T?
public init(remote : String, enumType: T) {
self.enumType = enumType
}
}
这行得通,这种方法的问题是我不希望每个 WRPProperty 都有枚举。通过这样声明,它会强制用户在创建属性时始终添加数据类型,这是不受欢迎的行为。我还可以创建 WRPEnumProperty 对象,但由于库如何处理这些定义以及用户如何定义它们,所以它不可用。
B) 在 init 方法中声明泛型类型
public struct WRPProperty {
var enumType : RawRepresentable
public init<T: RawRepresentable>(remote : String, enumType: T) {
self.enumType = enumType
}
}
这不起作用,因为 RawRepresentable 只能用作通用约束。
所以我的问题是,我如何存储枚举类型,以便我可以在任何时候创建该类型的任何枚举? (另外,我使用的是 Swift 2.2)
【问题讨论】:
标签: swift generics enums rawrepresentable