我在我的应用中使用EVReflection
。一个JSON响应应解析为Dictionary<String,Array<MyObject>>
类型。我已经通过像这样重写setValue
方法来成功解析了此代码:
override func setValue(_ value: Any!, forUndefinedKey key: String) {
switch key {
case "response":
if let dict = value as? NSDictionary {
response = Dictionary<String,Array<MyObject>>();
for (key, value) in dict {
var listValues = Array<MyObject>();
if let array = value as? NSArray {
for vd in array {
listValues.append(MyObject(dictionary: vd as! NSDictionary));
}
}
response![key as? String ?? ""] = listValues;
}
}
break;
}
}
但是,我在控制台中看到以下错误:
错误:无法为Swift.Dictionary
类型创建实例>
我应该以其他方式执行此操作吗?如何使错误消失?
答案 0 :(得分:0)
我可以通过使用propertyConverter
来解决这个问题,
override public func propertyConverters() -> [(key: String, decodeConverter: ((Any?) -> ()), encodeConverter: (() -> Any?))] {
return[
(
key: "response"
, decodeConverter: {
if let dict = $0 as? NSDictionary {
self.response = Dictionary<String,Array<MyObject>>();
for (key, value) in dict {
var listValues = Array<MyObject>();
if let array = value as? NSArray {
for vd in array {
listValues.append(MyObject(dictionary: vd as! NSDictionary));
}
}
self.response![key as? String ?? ""] = listValues;
}
}
}
, encodeConverter: { return nil }
)
]
}
答案 1 :(得分:0)
对于EVReflection
,您应该使用NSDictionary
而不是Dictionary
(这是一个结构)。
如果执行此操作,则无需覆盖任何属性转换器方法。