终于在这里找到了答案。这是一种非常巧妙的方式,我很惊讶地看到文档中没有明确提到它。
将多个键组合成单个对象的方法是在方法中使用数组将目标属性映射到多个键+JSONKeyPathsByPropertyKey
。当你这样做时,Mantle 将使多个键在它们自己的NSDictionary
实例中可用。
+(NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
...
@"location": @[@"latitude", @"longitude"]
};
}
如果目标属性是一个 NSDictionary,那么你就设置好了。否则,您将需要在+JSONTransformerForKey
或+propertyJSONTransformer
方法中指定转换。
+(NSValueTransformer*)locationJSONTransformer
{
return [MTLValueTransformer transformerUsingForwardBlock:^CLLocation*(NSDictionary* value, BOOL *success, NSError *__autoreleasing *error) {
NSString *latitude = value[@"latitude"];
NSString *longitude = value[@"longitude"];
if ([latitude isKindOfClass:[NSString class]] && [longitude isKindOfClass:[NSString class]])
{
return [[CLLocation alloc] initWithLatitude:[latitude floatValue] longitude:[longitude floatValue]];
}
else
{
return nil;
}
} reverseBlock:^NSDictionary*(CLLocation* value, BOOL *success, NSError *__autoreleasing *error) {
return @{@"latitude": value ? [NSString stringWithFormat:@"%f", value.coordinate.latitude] : [NSNull null],
@"longitude": value ? [NSString stringWithFormat:@"%f", value.coordinate.longitude]: [NSNull null]};
}];
}