gpt4 book ai didi

ios - 基于另一个属性的地幔属性类?

转载 作者:可可西里 更新时间:2023-11-01 03:31:41 26 4
gpt4 key购买 nike

如何使用 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 的“内容”部分,所以我无权访问“类型”字段。无论如何访问对象的其余部分?或者以某种方式将“内容”的模型类基于“类型”?

我以前被迫做这样的 hack 解决方案:

+(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方法传递类型信息:

+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
NSStringFromSelector(@selector(content)) : @[ @"type", @"content" ],
};
}

然后在 contentJSONTransformer 中,您可以访问“type”属性:

+ (NSValueTransformer *)contentJSONTransformer 
{
return [MTLValueTransformer ...
...
NSString *type = value[@"type"];
id content = value[@"content"];
];
}

关于ios - 基于另一个属性的地幔属性类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26122616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com