测试已测试 | ✓ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布日期最后发布日期 | 2014年12月 |
由 Evgeny Shurakov 维护。
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];
框架将检查模型并检查源数据中的值的类型。
映射配置中指定的所有属性必须在源数据中存在。