测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可证 | BSD |
发布最后发布 | 2017年4月 |
由 Tony Li,daydayfree 维护。
依赖于 | |
libextobjc/EXTScope | ~> 0.4 |
libextobjc/RuntimeExtensions | ~> 0.4 |
Polymorph 将敌人变成羊。
通过使用类似 @dynamic
的指令,将字典的转换值转换为 Objective-C 类的属性。
假设我们有一个 Movie
类。
@interface Movie : PLMModel
@property (nonatomic, readonly) NSString *identifier;
@property (nonatomic, readonly) NSString *title;
@property (nonatomic, readonly) NSString *year;
@property (nonatomic, readonly) NSString *subtype;
@property (nonatomic, readonly) float rating;
@property (nonatomic, readonly) NSArray<Celebrity *> *casts;
@end
我们不需要为每个属性实现访问器方法,可以使用 plm_dynamic
宏来自动生成 getter 和 setter。
@implementation Movie
// Property `identifier` comes from `id` field。
@plm_dynamic(identifier, @"id")
// Property `title` comes from field with same name `title`.
@plm_dynamic(title)
// `year` and `subtype` comes from fields with same names.
@plm_dynamic_multi(year, subtype)
// `rating` comes from `rating.average` keypath. Field value will be transformed to `float` as it's declared.
@plm_dynamic_keypath(rating, @"rating.average")
// `casts` comes from `casts` field. Field value, which is an object array, will be transformed to NSArray with Celebrity instance.
@plm_dynamic(casts, @"casts", PLMArrayTransformerNameForClass([Celebrity class]))
@end
plm_dynamic
宏将属性与字典字段关联起来,使用 NSValueTransformer
将字典值转换为声明类型。有关详细用法,请参阅 Polymorph.h
中的注释。
您还可以在未扩展 PLMModel
的情况下使用 Polymorph。遵从 PLMRawDataProvider
协议,调用 plm_activate
,然后即可开始使用。
Polymorph 在 BSD 许可证下发布。有关更多信息,请参阅 LICENSE。