ESObjectsConstructor 1.0.2

ESObjectsConstructor 1.0.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布日期最后发布日期2014年12月

Evgeny Shurakov 维护。



  • 作者:
  • Evgeny Shurakov

严格框架,用于在 NSDictionary 和强类型对象之间映射

Cocoapods

pod 'ESObjectsConstructor', '~> 1.0.0'

假设我们有两个模型,User 和 Address,如下所示

@interface User
@property(nonatomic, copy) NSString *identifier;
@property(nonatomic, copy) NSString *name;
@property(nonatomic, strong) NSNumber *age;
@property(nonatomic, strong) NSDecimalNumber *cash;
@property(nonatomic, assign) double score;
@property(nonatomic, strong) NSDate *lastVisited;
@property(nonatomic, strong) Address *address;
@end
@interface Address
@property(nonatomic, copy) NSString *city;
@property(nonatomic, copy) NSString *street;
@property(nonatomic, assign) int houseNumber;
@end

我们还有一个字典,可能是从网络或磁盘加载的

@{
    @"id" : @"4",
    @"name" : @"John",
    @"age" : @(42),
    @"cash" : @"101.01",
    @"score" : @(95.12),
    @"lastVisited" : @(1398716134000),
    @"address" : @{
        @"city" : @"New York",
        @"street" : @"Fifth Avenue",
        @"houseNumber" : @(10)
    }
}

现在,要将字典转换为强类型 User 模型,我们需要创建两个映射:一个用于 User 模型,另一个用于 Address 模型。
映射是一组规则,描述了哪些属性需要映射以及如何映射非平凡属性。

ESObjectMapping *userMapping = [[ESObjectMapping alloc] initWithModelClass:[User class]];

// only specifies properties are mapped
[userMapping mapProperties:@[@"name", @"age", @"cash", @"score"]];

// destination key can be different from the source one
[[userMapping mapKeyPath:@"id"] setDestinationKey:@"identifier"];

// transformer can be provide to create object from source data
[userMapping mapKeyPath:@"lastVisited" 
   withValueTransformer:(id <ESObjectValueTransformerProtocol>)dateTransformer];

[userMapping mapKeyPath:@"address" 
             withConfig:[ESObjectsConstructorConfig objectWithMapping:addressMapping]];
ESObjectMapping *addressMapping = [[ESObjectMapping alloc] initWithModelClass:[Address class]];

[addressMapping mapProperties:@[@"city", @"street", @"houseNumber"]];
ESObjectsConstructor *objectsConstructor = [[ESObjectsConstructor alloc] init];
NSError *error = nil;
User *user = [objectsConstructor mapData:arrayOrDictionary 
                              withConfig:[ESObjectsConstructorConfig objectWithMapping:userMapping] 
                                   error:&error];

框架将检查模型并检查源数据中的值的类型。
映射配置中指定的所有属性必须在源数据中存在。