• 通用规范
    类、协议、枚举、结构体
  1. 类、协议、枚举、结构体的命名首字母大写;
  2. 类、协议、枚举、结构体采用驼峰命名;
  • 变量名
  1. 变量名采用驼峰试命名规则;
  2. 变量名语义明确;
  3. 变量名采用英文、数字等方式,禁止使用拼音,首字符应小写;
  4. 同一类型的UI变量名请以类型开头后接实际功能英文语义,例如:btnLogin,imageViewLogo等 而不是loginBtn,好处在于便于编译器联想;
  5. 变量名使用名词,普通变量名采用单数,集合类变量名采用复数;
  6. 相对独立的程序块之间,变量声明之后必须加空行
  • 常量
  1. 全局常量名需大写,以下划线(_)分割各个单词的语义
    方法&函数
  2. 方名采用驼峰试命名规则;
  3. 方名语义明确;
  4. 方名采用英文、数字等方式,禁止使用拼音,首字符应小写;
  5. 单一职责,一个方法里只负责一件事
  6. 方法里代码功能较多时(eg:一个view中含有多个控件,初始化控件时)请将方法按照说明4单一职责进行拆分;
  7. 方法里的代码需要少于100行
  • 其他说明
  1. if、for、while、switch括号前后加空格;
  2. if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{};
  3. 比较操作符,赋值操作符”=”、”+=”,算术操作符”+”、”%”,逻辑操作符”&&”、”&”,位域操作符”<<”、”^”等双目操作符的前后加空格;
  4. “!”、”~”、”++”、”–”、”&”(地址运算符)等单目操作符前后不加空格;
  5. 一行只写一条语句
  6. 较长的语句(>80字符)要分多行书写,折行时操作符放在新行之首
  7. 没有用或者没有使用的代码请移除掉
  • 注释
  1. 注释语言必须准确、易懂、简洁;
  2. 注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开;
  3. 注释与所描述内容进行同样的缩排;
  4. 将注释与其上面的代码用空行隔开;
  5. 单行注释时 “//”后需要加一个空格
  • OC语言相关规范
  1. 除了局部变量,请尽量使用属性(@property)
  2. 数组声明时需要添加上数组里存储的对象类型说明;
    • 正确:Array arrayMember<Member >
    • 错误:Array *arrayMember<>
  3. 使用BOOL值时,确保使用YES和NO,禁止使用ture和false
  4. if、while判断时,请将字面值放在前面,避免手误产生bug,
    • 正确:if (25 == age)
    • 错误:if (age == 25)
  5. 禁止使用关键字定义变量
  6. 宏定义时,请保证每个小语句都用小括号()包起来
  • swift语言相关规范
  1. swift语言里确定不会改变的请使用let关键字定义
  2. 类型说明在冒号后添加一个空格;
    • 正确:let mdn: String
    • 错误:let mdn:String
  3. 可选值解包时请确定保证有值,如无法确定,请做好if let或者guard let的判断处理
  4. 实体尽量使用Struct,因为Struct为值类型,Class是引用类型
    • 枚举,结构体是值类型,类是引用类型
    • 什么时候该用值类型:
      • 要用==运算符来比较实例的数据时
      • 你希望那个实例的拷贝能保持独立的状态时
      • 数据会被多个线程使用时
    • 什么时候该用引用类型(class):
      • 要用==运算符来比较实例身份的时候
      • 你希望有创建一个共享的、可变对象的时候
  5. 实现多个协议时,尽量使用扩展extension来进行处理
    • 推荐的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyViewController: UIViewController {
// class stuff here
}
// MARK: - UITableViewDataSource
extension MyViewController: UITableViewDataSource {
// table view data source methods
}
// MARK: - UIScrollViewDelegate
extension MyViewController: UIScrollViewDelegate {
// scroll view delegate methods
}
* 不推荐的方式
1
2
3
class MyViewController: UIViewController, UITableViewDataSource, UIScrollViewDelegate {
// all methods
}
  • 第三方使用规范
  1. 统一使用cocoapods来管理第三方代码
  2. 导入第三方代码时,需明确版本号
    • 正确: pod ‘RxSwift’, ‘4.4.0’,
    • 错误: pod ‘RxSwift’ / pod ‘RxSwift’, ‘~4.4.0’