我正在使用通用类型擦除,需要从字典中获取数据并恢复为正确的类型。我使用泛型来检查进入数据结构的数据是否正确,然后将其类型删除。
我尝试查看堆栈溢出中的某些选项以转换通用可选内容,但没有一个是正确的。过去我已经实现了这一点,但是忘记了如何做。
class Foo {
private var data = [String: Any?]()
func getData<STATE:State>(for state: STATE.Type) -> STATE.DATA_TYPE {
// What do?
}
func set<STATE: State>(data: STATE.DATA, for state: STATE.Type) {
self.stateData[state.stringRepresentation()] = data
}
}
国家有static func stringRepresentation() -> String
,这是字典中的键
我希望函数返回Any?
或强制转换为nil STATE.DATA_TYPE
或强制将其中的任何数据强制转换为STATE.DATA_TYPE
。 STATE.DATA_TYPE
也可以是可选的
答案 0 :(得分:0)
我设法找到了代码和相应的文章来回答我的问题:How to produce a nil of a generic type
func cast<T>(_ v: Any?)->T {
if let E = T.self as? ExpressibleByNilLiteral.Type {
if let v = v {
return v as! T
} else {
return E.init(nilLiteral: ()) as! T
}
} else {
return v as! T
}
}