原创内容,转载请注明出处:
http://www.jianshu.com/p/870085b45795
前言(废话)
搬家到简书有一段时间了,但是一直没有写什么东西,然后也不知道该写些什么好,第一篇文字就先简单分享下平时我开发时候的一些技巧吧!
废话少说,今天给大家分享的开发技巧是面对大量重复代码的时候我们该怎么处理.
首先先给大家介绍一款非常不错的 xcode 插件,在xcode中很方便的编辑大量字符串代码:https://github.com/duzexu/HOStringSense-for-Xcode ,在这里先感谢下作者!
在开始之前,大家需要先安装上面的插件(其实也可以不安装的,只是比较麻烦而已)
问题
很多时候我们开发一个工程的时候会遇到一个问题,就是重复代码.对于这些代码我们通常的处理方式大概为以下几点
- 继承
- 提供分类
- 抽成工具方法
- ...
以上几种处理办法基本可以解决大部分代码复用问题,但是有些问题它们就力不从心了比如说:
- 大多数重复的UI页面:页面元素大多相同,抽成UI模块和继承怕耦合,不得不重复代码写多遍
- 重复的网络请求模块:我们在做接口请求的时候为避免耦合和代码清晰,一般都将每一个接口都写成一个单独的model类,但是,这些类基本上大部分的代码是相同的
- ...
遇到这种问题的时候我们基本上采取的方法就是 复制
+粘贴
,但是即使是这样我们仍然需要耗费很大的工作量,而且一不小心就可能或者是复制错或者漏掉点什么,就更麻烦了,那我们该怎么样才能解决这种问题呢?
解决思路
这种问题真的是很操蛋,但是我们也没有什么其他办法可以解决,所以我们也只能从写代码方面下手了.那么同样是写代码怎么才能更快点呢?
上面说到了以上代码的规律就是:大多数都一样,少量不一样,然后这样的代码还必须分开写,所以我们就可以像一个办法:如果可以写段程序,自动生成代码不就好了?根据这个思路可以想到一个模型:
写一段代码模板->找出代码中不同部分-->根据规则生成不同部分代码-->替换不同部分->写入代码文件
代码示例
以上介绍了大概思路,现在用代码实际操作一下.
需求举例
假设我们有这种场景:你有一个项目,服务端一下丢给你100个接口给你调,怎么办?按照我们刚才说的那种模式逐一实现就可以了:
- 写一段代码模板
- 找出代码中不同的部分
- 根据规则生成不同部分代码
- 替换不同部分
- 写入代码文件
写一段代码模板
.h文件
.m文件
如上图,上面是一个接口model类的.h
和.m
文件,每一个接口都有这样一个类和它对应,我习惯根据接口来命名接口对应的model的类名,所以大家看到的如上.
找出代码中不同的部分
如上图所示,每一个接口model的不同部分,都已经用数字标记出来,那么我们要写其他的接口的话可以直接把以上不同的部分替换成接口对应的代码就好了.
根据规则生成不同部分代码
如上图所示,我们需要生成的代码有:
- 类名(根据接口生成类名)
- 貌似也没有其他的啦,😄
然后我们可以写以下代码:
//接口数组:取不同部分批量生成类名
NSArray *urls = @[
@"test.testprotocal.login",
@"test.testprotocal.logout",
@"test.testprotocal.get.userInfo",
@"test.testprotocal.get.vertifycode",
@"test.testprotocal.get.companyInfo",
];
NSMutableArray *model_names = [NSMutableArray arrayWithCapacity:urls.count];
for (NSString *url in urls) {
//删除url中相同的部分: 从@"test.testprotocal.login"删除@"test.testprotocal.",留下login
NSString *clear_url = [url stringByReplacingOccurrencesOfString:@"test.testprotocal." withString:@""];
//get.userInfo 转换成 ModelGetUserInfo
NSMutableString *model_name = [NSMutableString stringWithFormat:@"Model"];
NSArray *clear_url_part_words = [clear_url componentsSeparatedByString:@"."];
for (NSString *url_word in clear_url_part_words) {
NSString *url_word_firstuppercase = [[[url_word substringWithRange:NSMakeRange(0, 1)]uppercaseString]stringByAppendingString:[url_word substringFromIndex:1]];
[model_name appendString:url_word_firstuppercase];
}
[model_names addObject:model_name];
}
NSLog(@">>>>>:%@",model_names);
打印log为:
2016-11-10 14:45:17.139 生成代码[44815:4120787] >>>>>:(
ModelLogin,
ModelLogout,
ModelGetUserInfo,
ModelGetVertifycode,
ModelGetCompanyInfo
)
替换不同部分
类名生成好了,下面我们就将模板中的字符串替换成我们的类名就好了.
然后这时候就用到我们刚才提到那个xcode插件了,如果你已经安装过了,那么你会看到当你在编辑字符串的时候会出现这样的样子:
正在编辑的字符串上面多了一个白色框框,点击这个框框会出现:
是不是很神奇?哈哈,这时候你把你.h
和.m
文件的代码贴进去就好了,然后把生成的类名替换到代码中该替换的部分,就会看到上图所示的样子
提示:如果你没有安装上面那个插件的话,就要手动吧代码模板贴进去了,然后换行上面的需要自己手动添加...
写入代码文件
以上工作算是全部就绪了,然后我们只需要生成文件就好了.
写好以后 command
+ R
运行,大功告成!
我们看下生成好的文件:
最后把生成的文件,稍作修改就可以直接和后台的小伙伴们调试啦~.
总结
上面只是做个示例,方法用熟的话,你会发现你的代码可以各种生成,如果以上有一百个接口的话,这些文件你可以一次性就生成了,是不是很快?
另外,这里只是交流一下写代码的小技巧,其实写代码有很多技巧,以后慢慢和大家分享.
原创内容,转载请注明出处:
http://www.jianshu.com/p/870085b45795
如果我的文章对您有帮助请不吝喜欢和关注~~