iOS 命名规范和编码规范

前言

在多人协作中,经常会看到风格不一的代码,这不单单是看起来头疼,很多时候隐藏的问题也会由此而生。写这篇文章的目的是为方便地对代码进行管理,让整个团队的代码规范化。这里的部分规定可能和你在其他地方看到的不一样,但还是请遵守这些规则。

命名

这部分推荐参考 Apple 官方对方法和属性的命名。下面列出的命名和写法,皆为 Apple 官方推荐的写法,具体可参考官方文档或头文件。

变量名

建议尽量遵守 Apple 的命名约定,推荐使用长的、描述性强的方法名和变量名,项目越大越复杂,这种命名的优点越能体现出来。
极其不推荐滥用缩写,这会给协同工作的程序员带来极大的麻烦。当然常用的、约定俗成的缩写使用起来还是很方便的,但需要看具体场景。

推荐

不推荐

方法名

方法名推荐使用驼峰命名,方法类型和方法名之间需要用空格分隔,方法段之间也用空格分隔。参数前需要有一个描述词。如需传递多个参数,尽量避免使用 “and” 而是用 “with” 代替。

推荐

不推荐

字面量

从 Objective-C 1.0 开始,创建 NSString 对象就可以使用字面量语法了。实际上我们现在创建字符串都会使用这种方便的方法,几乎没见过谁还会使用 alloc 和 init 方法来分配并初始化 NSString 对象了。

数组

使用字面量语法创建数组最大的好处是:更加安全!因为如果加入数组的对象为 nil,编译器会马上抛出异令程序终止,这明显比等创建好了数组之后才发现元素少了要好得多。

使用字面量语法

不使用字面量语法

字典

除了同样具有创建字面量数组的优点外。使用字面量语法创建字典,还具有更加容易理解的优点。

使用字面量语法

不使用字面量语法

可变数组及字典

如果数组或字典为可变的,则可以通过下标修改其中的元素值。

使用字面量语法

不使用字面量语法

NSNotification

对于通知的key,我们通常应该定义成字符串常量,尽量使用类前缀来当作这个通知名的前缀。使用 “did、will、should” 这样的动词以及 Notifications 来结尾。并在公开的接口文件中将其声明为 extern 的, 并且在对应的实现文件里面定义。

一般会将这些常量统一写在一起,便于查找修改以及维护。在我们的项目中,通常会在 /Classes/Constant 目录下找到这些类。

项目相关

如果你正在进行我们的项目,请务必仔细读完下面的内容,如果有问题请及时提出。

关于 view 的实现方式

我们的项目目前统一使用 纯代码 + Masonry 的实现方式,这样可以更好的适配不同分辨率的机型,也便于后期的项目维护。请不要使用 xib 或 stroyboard 来实现的你任务。

关于代码的风格

除了需要遵守上述的命名规范外,还需要
1.我们的项目中,缩进统一为两个空格。
2.大括号不需要换行。示例如下:

关于提交 PR

1.如果你同一时间接受了多个任务,请每个任务单独新建以任务功能命名的分支,不要把所有任务都写在一个分支,这样 review code 的时候非常困难,你修改代码的时候也比较麻烦。

2.任务中如果需要 push 才能展示的控制器,如果 development 分支暂时还没有依赖的跳转控制器,都可以选择一个近似功能的点击事件来跳转,但是需要在提交 PR 时在 trello 中说明具体怎么才能跳转到你的任务控制器。

3.下一次开始写代码前,请先pull一下最新代码,如果 development 分支有新的提交,请在你的任务分支 rebase development 分支。每次提交PR前,都要确保你的任务分支已经 rebase 了最新的 development 分支。

4.每个任务都需要从 iOS 8.X 开始适配,并且适配 4s、5s、6、6Plus 四种分辨率机型。不能在个别机型上出现显示不全或重叠等现象。

关于素材图片

所有你的任务所需要的素材图片请放入 Assets.xcassets 内,并按照你的功能命名新建文件夹。添加前请检查是否项目内已添加相同素材图片。避免项目中同一个图片素材出现多次。

关于颜色

需要使用多次的颜色,请将方法写在 UIColor 的分类中。大家在该类中新增方法的时候,可以看一下之前的方法有没有可以使用的颜色,避免同一种颜色出现在多个方法中。如果命名比较困难,可以加上你的控制器功能作为方法名的一部分来标示。

关于多语言本地化

如果项目中需要实现多语言本地化,所有需要展示的字符串,都需要写在对应的本地化配置文件里,本地化文件里面的key,都使用小写字母,如果有多个单词使用下划线分割。添加自己需要的key前请检查配置文件内是否有相同 key,避免冲突。

关于继承

我们的 iOS 项目,需要使用 tableView 实现的部分,统一需要继承框架的 tableViewController。
我们的 iOS 框架 StarterKit 有 Demo可以参照继承 tableViewController 的实现方式。
https://github.com/qijitech/ios-starter-kit

说在最后的话

本文会不断更新修改,以求给大家一份较为全面的编写代码风格的建议。如果有任何建议和问题,欢迎联系我。

更新记录

2016.08.08 初版
2017.04.06 更新了 NSNotification 的部分

发表评论

电子邮件地址不会被公开。 必填项已用*标注