JCS_Injection 1.0.3

JCS_Injection 1.0.3

JackCat维护。



 
依赖项
MJExtension>= 0
JCS_Category>= 0
 

  • devjackcat

pod "JCS_Injection"

[目录]

介绍

JCS_Injection可以根据文件配置对对象属性进行动态注入。

使用方式

无需引入任何头文件,直接在需要注入的对象中添加方法

必须添加

//标志该对象开启属性动态注入,必须
- (BOOL)jcs_propertyInjectEnable {
    return YES;
}

默认读取配置文件名为${classname}.geojson,也可以通过添加方法进行修改

- (NSString*)jcs_propertyConfigFileName {
    return @"injection_file.geojson";
}

文件配置规则

  1. 需要注入的属性必须放在"data"属性下
  2. "data"下的属性名必须与对象中定义的属性名一致,否则无法注入
  3. 支持基本类型、NSDictionary、NSArray、自定义模型、自定义模型数组

基本类型注入

{
    "data":{
      "count":50,
      "name":"张三"
    }
}

NSDictionary 注入

{
    "data":{
          "personDict":{
              "username":"张三",
              "age":18
          }
    }
}

NSArray 注入

{
    "data":{
          "items":[{
              "id":123,
              "name":"cat"
          },{
              "id":321,
              "name":"dog"
          }]
    }
}

模型注入

  1. 模型注入需要添加class属性,代表模型的类型即可
  2. 若class未配置或配置无效class,则会被当做普通NSDictionary进行注入
{
    "data":{
          "peter":{
              "class":"Person",
              "name":"peter",
              "age":15,
              "money":10000000
          },
    }
}

模型数组注入

  1. 数组模型注入需要包含两个属性itemClass、list
    1. itemClass代表数组中模型对象类型,必须有效class
    2. list数组数据
  2. 如不符合这两个规则,会被当做普通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
      },
  }
}

执行结果截图

常见问题

配置文件无效

控制台打印出如下内容表示文件未找到。

  1. 检测文件名是否正确
  2. 检查配置文件是否被copy进包内
Example_InjectionVC 注入失败 filename = Example_InjectionVC.geojson1 无效

配置文件不是合法json

配置文件内容异常,检测是否符合JSON格式

Example_InjectionVC 注入失败 filename = Example_InjectionVC.geojson 文件内容不是合法的json

作者

[email protected]