【发布时间】:2018-07-27 11:38:52
【问题描述】:
我正在尝试使用通用嵌套对象从 json 对象中解码,为此我想在解码时动态传递类的类型。
例如,我的类是扩展 ObjectModel(和 :Codable)的 EContactModel 和 ENotificationModel。 ENotificationModel 可以包含嵌套的 ObjectModel(可以是联系人、通知或其他对象模型)。
我有一本这样的字典:
static let OBJECT_STRING_CLASS_MAP = [
"EContactModel" : EContactModel.self,
"ENotificationModel" : ENotificationModel.self
...
]
我在 ENotificationModel 中的解码初始化方法如下所示:
required init(from decoder: Decoder) throws
{
try super.init(from: decoder)
let values = try decoder.container(keyedBy: CodingKeys.self)
...
//decode some fields here
self.message = try values.decodeIfPresent(String.self, forKey: .message)
...
//decode field "masterObject" of generic type ObjectModel
let cls = ObjectModelTypes.OBJECT_STRING_CLASS_MAP[classNameString]!
let t = type(of: cls)
print(cls) //this prints "EContactModel"
self.masterObject = try values.decodeIfPresent(cls, forKey: .masterObject)
print(t) //prints ObjectModel.Type
print(type(of: self.masterObject!)) //prints ObjectModel
}
我也尝试过传递 type(of: anObjectInstanceFromADictionary) 但仍然无法正常工作,但如果我传递 type(of: EContactModel()) 则可以。我无法理解这一点,因为两个对象都是相同的(即 EContactModel 的实例)
有解决办法吗?
【问题讨论】:
标签: json swift jsondecoder