之前公司的项目json转换model是自己写的,手动从字典中取值、然后再赋值。处于多方面考虑决定使用YYModel,原因就不说了。
YYModel通过一个映射关系可以自动从json转换到model
/返回一个 Dict,将 Model 属性名对映射到 JSON 的 Key。
+ (NSDictionary *)modelCustomPropertyMapper {
return @{@"name" : @"n",
@"page" : @"p",
@"desc" : @"ext.desc",
@"bookID" : @[@"id",@"ID",@"book_id"]};
}
但是我们的项目有300多个接口,model也有几十个,没有model里面都添加一个这个方法,工作量不说了,关键都是字符串,复制来复制去的,特别容易出错,所以就把VVDocumenter-Xcode
插件修改了一下来做这个工作。
所以这个插件只是简单的修改了一下,有很多坑,先来介绍坑吧,合适你了再用。
- 坑1
因为是VVDocumenter-Xcode
修改的,所以会和VVDocumenter-Xcode
冲突,两个插件不能共存,你在安装我的插件之前做好先把VVDocumenter-Xcode
卸载了。 - 坑2
代码的自动生成是有条件的。需要格式对照
//比如这样
-(void)setData:(NSDictionary *)data
{
self.strItemId = [data valueForKey:@"id"];
self.strItemName = [data valueForKey:@"title"];
self.strItemDesc =[data valueForKey:@"content"];
}
首页你的原来解析的代码要在一个方法体里面(方法名字无所谓),然后解析格式是self.aaa = xxxxx@"bbb"xxx;
这样在这个方法体上面就会自动生成对照的映射@"aaa":@"bbb"
。
如果你的原来的解析不是这种格式的,这个插件也是用不了的,针对性比较强。
- 坑3
要结合XAlign
自动对齐插件来使用
自动生成的代码是不带对齐的,所以XAlign
是用来对齐的。
另外我也不知道为什么,在自动生成的时候会插入一个不知道哪里来的空格符,对齐之后才会显示出来,初步估计是编码格式的问题
//生成的原始代码是这样的
+(nullable NSDictionary<NSString *, id> *)modelCustomPropertyMapper {
return @{@"strItemId " : @"id",
@"strItemName " : @"title",
@"strItemDesc " : @"content",
}
比如@"strItemId "
就是最后带有一个空格,要删除掉。
另外代码生成后+
前面有一个tab空格,也要删掉
- 坑4
估计后期不会维护,我已经将就着用完了,希望以后能有大神继续优化更新。我分享出来只是因为我方便完了,如果有人和我一样的情况,也可以将就着方便一下。
下面说下怎么使用和删除
加载插件:下载项目,直接运行,运行的时候不是选择模拟器,就是选择My Mac
。运行完成后就安装插件成功了。关闭xcode,重新打开,会弹出一个选择框,选择‘Load Bundle’,就会开启成功。
使用:在上面说到的原来的代码方法体上面敲三个斜杠/
,就会自动生成对应的代码。
删除:使用完成后前往目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins
,删除掉DictInitToYYModel.xcplugin
文件,重新启动xcode就可以了。