傻瓜式iOS代码规范(格式)

每个大公司都有自己的代码规范,大如Google、GitHub、Apple都可以找到他们的相关规范文档,很多小公司或者团队也有自己的规范。规范对于开发者来说,不只是代码的样式更好看,更有逼格,其实最大的意义在于增加代码的可维护性:代码样式的统一、类中代码的顺序、命名规范等多方面的统一会让团队每个开发者在修复问题或者维护老代码时,更加快速的定位到指定代码,理解原有代码逻辑,减少维护成本。

本文不会讲这些规范或者我们的规范,主要讲一下如何更便捷地使自己的代码符合规范中格式(格式是指空行、空格、缩进、对齐等方面的规定)。

当开发者自己的代码习惯与代码规范存在较大冲突时,想要符合代码规范,一般的进化路线是这样的:

  1. 最笨的一定是写完代码,逐个去调整代码使其符合规范;

2. 使用code snippt

code snippt 就是内置在xcode中的代码样式模板库,xcode中已经有一些内置默认的样式,通常我们需要自定义一些符合我们规范的模板(例如if else 、init、getter方法)。制作模板很简单,只需要将需要制作模板的代码卸载xcode编辑器中,然后选中这段代码,按住command然后拖动到右侧红色方框中:

创建code snippt

关于code snippt其实只要记住<#abc#>即可,其中abc就是要替换的地方显示的内容, <#abc#>是使用的命令,这里需要注意不能先输入<##>再插入abc。
具体可以参考:http://www.cocoachina.com/industry/20130604/6336.html

对于一个团队来说,可以针对团队代码规范,建议一些基本的code snippts, 然后分发给团队每个成员(创建好后,在路径~/Library/Developer/Xcode/UserData/CodeSnippets中),这样大家共享。

3. 工具化:

总有一些代码时我们无法通过code snippt覆盖的,这就需要我们使用一些工具,快速修改这些不符合规范的的代码,这时我们可以通过Alcatraz安装插件来解决(apple为了安全性,xcode8默认无法使用插件,使用参见请参考:https://www.ishuo.cn/doc/cbwrgnqf.html )。
1). ClangFomat-Xcode插件,使用方式参考 http://www.jianshu.com/p/80cfa7430467
2). Uncrustify插件,使用方式参考 https://github.com/benoitsan/BBUncrustifyPlugin-Xcode
Uncrustify包含了ClangFomat-Xcode插件的功能,可以对选定的代码或者文件操作,格式化为标准样式,推荐使用。
安装成功后,重启xcode,可以通过下图方式打开Uncrustify:

打开Uncrustify方式

打开Uncrustify的perferences后如下图, 按照图示即可在指定路径建立一个Uncrustify.cfg文件,Uncrustify.cfg文件中是对代码格式的一些定义,我们需要根据自己的规范修改其中的定义,保存后。 对指定文件或者代码使用“format active file”或“format selected lines”即可格式化代码。(可以看到上图中的还有view log 按钮,可以查看在格式化过程中是否正常,出现问题在哪里)

配置Uncrustify

例如我们的代码规范如果是这样的:

#pragma mark 待审批label
- (UILabel *)toApproveLbl
{
    if (_toApproveLbl == nil)
    {
        _toApproveLbl = [UILabel new];
        _toApproveLbl.font = FONT_SYSTEM(Adapter_Zoom(14));
        _toApproveLbl.textAlignment = NSTextAlignmentCenter;
        _toApproveLbl.textColor = cor3;
    }

    return _toApproveLbl;
}

那么就需要对默认生成文件中的配置进行一定修改,需要修改以下项目:

# Add or remove newline between 'if' and '{'
nl_if_brace = add # ignore/add/remove/force

其他配置项可以结合官方说明及文档中注释, 还有其他人总结的中文说明文档,理解配置文件中各个参数的意义,从而配置符合自己团队的规范。

注意上图中的“perform format on save of a source code file”选项前面的勾需要谨慎勾选,这个选项将在你保存源文件或者关闭xcode(自动保存源文件)时自动格式化所有有改动的文件,相当于每个有所修改的文件进行整个文件的格式化。 因为目前.cfg中的配置项并不一定是每个项目最终规范的形式,我们可能暂时无法找到合适的配置项来解决规范要求的每个格式,如果选中了的话,可能导致源文件中某些代码样式被转为错误的,不符合规范的样式。

例如:默认配置项对于实例方法和block语法的缩进和换行的配置,格式化代码后是这样的:

[self.approveContentV
mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(_topImgV.bottom).offset(5);
make.left.equalTo(_topImgV.left);
make.width.mas_equalTo(ValidWidth);
make.height.mas_equalTo(_contentH + Adapter_Height(26));
}];

而我们实际想要的是这样的(目前仍未找到合适配置项解决此问题):

[self.approveContentV mas_makeConstraints:^(MASConstraintMaker *make)
{
    make.top.equalTo(_topImgV.bottom).offset(5);
    make.left.equalTo(_topImgV.left);
    make.width.mas_equalTo(ValidWidth);
    make.height.mas_equalTo(_contentH + Adapter_Height(26));
}];

所以建议在没有完全摸清这个配置文件各个项目的情况下,暂时不要勾选。 暂时采用对那些可以确定格式化正确的代码片段使用它格式化。

p.s. 如果大家看到一些开源代码的规范样式符合自己的团队或者接近的话,可以在其基础上修改.cfg文件,附录中列了几个使用了Uncrustify的开源代码,可以在其代码文件中找到.cfg文件。

4. 自动格式化

最便利的方式必然是开发者随意写代码,在保存或者提交代码时,IDE或者Git服务器或者Jenkins自动根据规范调整样式,每个开发者更新最新代码时,就是规范后的样式。这其实也依赖于已经完全确定配置项目可以正确格式化代码,使其符合代码规范。

为提供便捷性,建议将常用操作设置快捷键。我的xcode设置了对选定代码行格式化的快捷键 cmd shift e 。设置成功后,对应操作按钮边上会出现快捷键内容。

设置快捷键后

附录:

使用Uncrustify的知名开源代码:
apps-ios-wikipedia
CocoaLumberjack
inbox-ios
wonderful-objective-c-style-guide

代码库中的.cfg文件

一些可参考的代码规范:
GitHub
raywenderlich
Realm
Spotify
The New York Times

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • error code(错误代码)=0是操作成功完成。error code(错误代码)=1是功能错误。error c...
    Heikki_阅读 3,372评论 1 9
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,345评论 7 249
  • 我爱你不可言说,全在微时。 在无意提及的时候。 等到下雨刮风喝酒夜深人静的时候。 你都不知道吧。 爱情太虚假又过分...
    机智少女王大困阅读 218评论 2 2
  • “等你考上了,我就不工作了,我觉得你能考上。”刚刚给妈妈打电话,她笑着跟我说。 一瞬间,暖暖的感觉溢满心头,像你在...
    木易不易丁阅读 1,252评论 0 1