根据allkeys数组快速创建NSObject类笔记
iOS开发中,客户端与服务器之间的数据交互格式是约定好的,对于一个key值比较少的字典,一般复制一个model然后修改key值即可,但是对于key值比较多的字典,就有可能出现以下问题:
1.修改和创建时候复制粘贴也有可能出现遗漏的问题
2.key值过多复制多了眼睛疼,头皮发麻
因为平时看数据结构是放在json高亮展示中,那里面对java开发有比较好的支持,放入json结构,可以自动生成java实例,也就是iOS开发中的数据model类
对于Objective-C是没有那么友好的支持的,下面是解决方案:
先打印出来服务端返回的数据格式resp=
{
"code": 1,
"msg": "成功",
"time": "1634889306",
"data": {
"pay_price": "1500.00",
"service_charge": 300,
"starttime": 1635562590,
"city": "海口市",
"province": "海南省",
"price": "5000.00",
"activityDate": "周六",
"refund_price": 1200
}
}
我们需要data层级里面的数据,通常情况我们根据打印出来的结果来复制对应的key值来创建Model,这里我们多走一步,先不打印它,先取出这data里面的数据并赋值给一个字典,我们先打印出来data中所有的key值,这是一个数组
NSDictionary * dic = resp[@"data"];
NSLog(@"%@",dic.allkeys);
数组内容是
pay_price,
service_charge,
starttime,
city,
province,
price,
activityDate,
refund_price
我们需要做的操作是将上面的内容转换成Model所需要的属性声明
希望得到的结果是
@property(nonatomic strong)NSString * refund_price;
@property(nonatomic strong)NSString * pay_price;
@property(nonatomic strong)NSString * service_charge;
@property(nonatomic strong)NSString * starttime;
@property(nonatomic strong)NSString * city;
@property(nonatomic strong)NSString * province;
@property(nonatomic strong)NSString * price;
@property(nonatomic strong)NSString * activityDate;
@property(nonatomic strong)NSString * refund_price;
需求明确了下面开始动手
1.在Desktop先创建个文件夹,这里的名字是creatfile,在这个文件件中创建一个文件allkeys.txt
2.将上一步打印出来的allkeys复制出来,粘贴到allkeys.txt中,注意不要带iOS中的"(",因为我没做处理
3.写个脚本文件allkeys.sh,这里简单说明下管道操作的用途,tr '\n' ' '表示将回车替换为空格,sed 's/ //g'去除空格,因为输出的是字符串,不写这两句虽然也行,但是有回车时候输出的内容需要自己排版,所以就加了这两个操作,为了输出结果好看点儿,echo >> filename 追加写,不会覆盖原来的内容,OLD_IFS="$IFS" 保存旧的分割符,可以在控制台复制,也可以去找文件outallkeys.txt复制
#!/bin/sh
path_in="/Users/mac/Desktop/creatfile/allkeys.txt"
path_out="/Users/mac/Desktop/creatfile/outallkeys.txt"
allstr=$(cat $path_in | tr '\n' ' ' | sed 's/ //g')
IFS=","
arr=($allstr)
cout=${#arr[*]}
for (( i = 0; i < cout; i++ ))
do
str=${arr[i]}
totalstr="@property(nonatomic,strong)NSString * ${str};"
echo $totalstr >> $path_out
arropuout[i]="\n$totalstr"
done
echo ${arropuout[*]}
接下来常规操作,给脚本文件添加可执行权限
chmod +x ./allkeys.sh
执行一下:
./allkeys.sh
打开creatfile文件夹,这里面多了个文件outallkeys.txt
内容是:
@property(nonatomic strong)NSString * refund_price;
@property(nonatomic strong)NSString * pay_price;
@property(nonatomic strong)NSString * service_charge;
@property(nonatomic strong)NSString * starttime;
@property(nonatomic strong)NSString * city;
@property(nonatomic strong)NSString * province;
@property(nonatomic strong)NSString * price;
@property(nonatomic strong)NSString * activityDate;
@property(nonatomic strong)NSString * refund_price;
解决了快速创建model类的问题,减少了一点儿时间
个人理解:所谓的技术提升,就是开发中遇到的任何觉得让人疲惫,或者难受的地方,都有更好的实现方案,而且方案你研究下,恰好能够实现它!