pod "JCS_Injection"
[目录]
介绍
JCS_Injection可以根据文件配置对对象属性进行动态注入。
使用方式
无需引入任何头文件,直接在需要注入的对象中添加方法
必须添加
//标志该对象开启属性动态注入,必须
- (BOOL)jcs_propertyInjectEnable {
return YES;
}
默认读取配置文件名为${classname}.geojson,也可以通过添加方法进行修改
- (NSString*)jcs_propertyConfigFileName {
return @"injection_file.geojson";
}
文件配置规则
- 需要注入的属性必须放在"data"属性下
- "data"下的属性名必须与对象中定义的属性名一致,否则无法注入
- 支持基本类型、NSDictionary、NSArray、自定义模型、自定义模型数组
基本类型注入
{
"data":{
"count":50,
"name":"张三"
}
}
NSDictionary 注入
{
"data":{
"personDict":{
"username":"张三",
"age":18
}
}
}
NSArray 注入
{
"data":{
"items":[{
"id":123,
"name":"cat"
},{
"id":321,
"name":"dog"
}]
}
}
模型注入
- 模型注入需要添加class属性,代表模型的类型即可
- 若class未配置或配置无效class,则会被当做普通NSDictionary进行注入
{
"data":{
"peter":{
"class":"Person",
"name":"peter",
"age":15,
"money":10000000
},
}
}
模型数组注入
- 数组模型注入需要包含两个属性itemClass、list
- itemClass代表数组中模型对象类型,必须有效class
- list数组数据
- 如不符合这两个规则,会被当做普通NSDictionary进行注入
{
"data":{
"persons":{
"itemClass":"Person",
"list":[{
"name":"aaaa",
"age":15,
"money":10000000
},{
"name":"bbbb",
"age":16,
"money":10000001
}]
}
}
}
Example
Example_InjectionVC.m
#import "Example_InjectionVC.h"
#import "Person.h"
@interface Example_InjectionVC ()
@property (nonatomic, strong) NSDictionary *data;
@property (nonatomic, strong) NSArray *persons;
@property (nonatomic, strong) NSArray *items;
@property (nonatomic, assign) NSInteger count;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) Person *lisi;
@end
@implementation Example_InjectionVC
//Example_InjectionVC开启属性注入
- (BOOL)jcs_propertyInjectEnable {
return YES;
}
//如文件名需要修改则通过该方法,不建议修改
//- (NSString*)jcs_propertyConfigFileName {
// return [NSString stringWithFormat:@"%@.geojson",NSStringFromClass(self.class)];
//}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = UIColor.whiteColor;
//此处断点查看属性注入情况
NSLog(@"");
}
@end
Person.h/Person.m
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, assign) float money;
@end
#import "Person.h"
@implementation Person
@end
配置文件Example_InjectionVC.geojson
{
"data":{
"count":50,
"name":"属性注入",
"data":{
"username":"张三",
"age":18
},
"items":[{
"id":123,
"name":"cat"
},{
"id":321,
"name":"dog"
}],
"persons":{
"itemClass":"Person",
"list":[{
"name":"aaaa",
"age":15,
"money":10000000
},{
"name":"bbbb",
"age":16,
"money":10000001
},{
"name":"cccc",
"age":17,
"money":10000002
}]
},
"lisi":{
"class":"Person",
"name":"aaaa",
"age":15,
"money":10000000
},
}
}
执行结果截图
常见问题
配置文件无效
控制台打印出如下内容表示文件未找到。
- 检测文件名是否正确
- 检查配置文件是否被copy进包内
Example_InjectionVC 注入失败 filename = Example_InjectionVC.geojson1 无效
配置文件不是合法json
配置文件内容异常,检测是否符合JSON格式
Example_InjectionVC 注入失败 filename = Example_InjectionVC.geojson 文件内容不是合法的json