我正在为我的库(https://github.com/JiriTrecak/Warp)进行枚举序列化,并且在将枚举类型存储在属性中时几乎没有遇到什么困难(我需要知道该类型,以便我可以对其进行序列化/反序列化要求)。
我有一个结构,其中包含您可以拥有的所有属性的描述,包括它们的类型、远程键等,如果那是枚举,我想再存储一个可选信息,这是要在何时创建的枚举类型找到密钥(例如,性别)。
我尝试了两种方法,这两种方法都不可用:
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)