根据allkeys数组快速创建NSObject类笔记

2021-11-01  本文已影响0人  数字d

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类的问题,减少了一点儿时间

个人理解:所谓的技术提升,就是开发中遇到的任何觉得让人疲惫,或者难受的地方,都有更好的实现方案,而且方案你研究下,恰好能够实现它!

上一篇下一篇

猜你喜欢

热点阅读