最後にここで答えを見つけました。これは非常に独創的な方法であり、ドキュメントで明示的に言及されていないことに驚きました。
複数のキーを 1 つのオブジェクトに結合する方法は、+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]};
}];
}