如何使用 Github Mantle 根据同一类中的另一个属性来选择属性类? (或者在更坏的情况下 JSON 对象的另一部分)。
例如,如果我有一个像这样的对象:
{
"content": {"mention_text": "some text"},
"created_at": 1411750819000,
"id": 600,
"type": "mention"
}
我想制作一个这样的变压器:
+(NSValueTransformer *)contentJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(NSDictionary* contentDict) {
return [MTLJSONAdapter modelOfClass:ETMentionActivityContent.class fromJSONDictionary:contentDict error:nil];
}];
}
但传递给转换器的字典仅包含 JSON 的“内容”部分,因此我无权访问“类型”字段。有没有办法访问对象的其余部分?或者以某种方式将“内容”的模型类基于“类型”?
我以前被迫做这样的黑客解决方案:
+(NSValueTransformer *)contentJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(NSDictionary* contentDict) {
if (contentDict[@"mention_text"]) {
return [MTLJSONAdapter modelOfClass:ETMentionActivityContent.class fromJSONDictionary:contentDict error:nil];
} else {
return [MTLJSONAdapter modelOfClass:ETActivityContent.class fromJSONDictionary:contentDict error:nil];
}
}];
}
您可以通过修改来传递类型信息JSONKeyPathsByPropertyKey
method:
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
NSStringFromSelector(@selector(content)) : @[ @"type", @"content" ],
};
}
Then in contentJSONTransformer
,您可以访问“type”属性:
+ (NSValueTransformer *)contentJSONTransformer
{
return [MTLValueTransformer ...
...
NSString *type = value[@"type"];
id content = value[@"content"];
];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)