将带有时间戳的 NSArray 映射到 iOS 中具有 Mantle 的 NSDate 对象



例如,我有一个带有属性的 MTLModel 子类顺序

 @property (nonatomic, copy) NSArray *dates;
 @property (nonatomic, strong) NSDate *dateFrom;
 @property (nonatomic, strong) NSDate *dateTo;

来自服务器的 JSON 如下所示:

 order =     {
    dates =         (
        1422784800,
        1422784843
    );
}

是否有可能以某种方式,m.b. 在+ (NSValueTransformer *)datesJSONTransformer将 JSON 中的这两个时间戳转换为 NSDate 对象?(日期到,日期从类的公关)

Mantle 1.x没有提供一种将JSON中的字段映射到多个模型属性的简单方法。给定下面的模型实现,这应该有效:

NSDictionary *JSONDictionary = @{
    @"dates" :  @[ @1422784800, @1422784843 ]
};
NSError *error = nil;
Order *order = [MTLJSONAdapter modelOfClass:Order.class fromJSONDictionary:JSONDictionary error:&error];
NSLog(@"Order is from %@ to %@", order.dateFrom, order.dateTo);

订单执行:

@implementation Order
- (NSDate *)dateFrom
{
    if ([self.dates count] > 0) {
        return self.dates[0];
    }
    return nil;
}
- (NSDate *)dateTo
{
    if ([self.dates count] > 1) {
        return self.dates[1];
    }
    return nil;
}
#pragma mark - MTLJSONSerializing
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
    return @{
        @"dates" : @"dates"
    };
}
+ (NSValueTransformer *)datesJSONTransformer
{
    return [MTLValueTransformer transformerWithBlock:^NSArray *(NSArray *dates) {
        if (![dates isKindOfClass:NSArray.class]) {
            return nil;
        }
        NSMutableArray *dateObjects = [NSMutableArray arrayWithCapacity:dates.count];
        for (NSNumber *timestamp in dates) {
            NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timestamp doubleValue]];
            [dateObjects addObject:date];
        }
        return [dateObjects copy];
    }];
}
@end

最新更新