-
命名规范
-
注释规范
-
声明
-
代码排版
命名规范
常用命名方法
-
匈牙利命名,一般只是命名变量,原则是: 变量名 = 类型前缀 + 描述,如bFoo表示布尔类型变量,pFoo表示指针类型变量。匈牙利命名还是有一定争议的,在Swift编码规范基本不被采用。
-
驼峰命名(Camel-Case),又称“骆驼命名法”,是指混合使用大小写字母来命名。驼峰命名又分为小驼峰法和大驼峰法。小驼峰法就是第一个单词是全部小写,如myRoomCount;大驼峰法是第一个单词的首字母也大写,如ClassRoom。
Swift编码命名规范
-
对类、结构体、枚举和协议等类型的命名应该采用大驼峰法,如 SplitViewController。
-
文件名采用大驼峰法,如BlockOperation.swift。
-
对于扩展文件,有时扩展定义在一个独立的文件中,用“原始类型名 + 扩展名”作为扩展文件名,如NSOperation + Operations.swift。
-
变量和属性采用小驼峰法,如studentNumber。
-
常量采用大驼峰法, 如MaxStudentNumber。
-
枚举成员与常量类似,采用大驼峰法,如ExecutionFailed。
-
函数和方法采用小驼峰法,如balanceAccount、isButtonPressed等。
注释规范
注释规范有:
- 文件规范
- 文档注释
- 代码注释
- 使用地标注释
文件注释
文件注释就是在每一个文件开头添加注释。文件注释通常包括如下信息:版权信息、文件名、所在模块、作者信息、历史版本信息、文件内容和作用等。
如下图:
image.png
文档注释
文档注释是指这种注释内容能够生成API帮助文档。文档注释主要对类型、属性、方法或函数等进行注释。
- 单行文档注释(///)
- 多行文档注释(/*.../)
如下图:
image.png
代码注释
程序代码中处理文档注释还需要在一些关键的地方添加代码注释,文档注释一般是给一些看不到源代码的人看的帮助文档,而代码注释是给阅读源代码的人参考的。
- 单行注释( // )
- 多行注释 ( /.../ )
使用地标注释
- MARK, 用于方法或函数的注释;
- TODO, 表示这里的代码有没有完成或者还要处理;
- FIXME,表示这里修改了代码。
声明
- 变量或常量声明
- 属性声明
1、变量或常量声明时,每行声明变量或常量的数量推荐一行一个,因为这样有利于写注释。
推荐使用:
let level = 0
var size = 10
不推荐使用:
let level, le2, le3 = 0; var size = 10
2、还有变量或常量的数据类型,如果有可能应尽量采用类型推断,这样代码更简洁。
推荐使用:
let level = 0
var size = 10
不推荐使用:
let level: Int = 0
var size: Int = 10
3、 如果不是默认数据类型,我们需要声明变量或常量的数据类型,示例代码如下:
let level: Int8 = 0
var size: Int64 = 10
4、指定数据类型时需要使用冒号(:),变量或常量与冒号之间没有空格,冒号和数据类型之间要有一个空格。示例代码如下:
推荐使用:
let level: Int8 = 0
var size: Int64 = 10
不推荐使用:
let level : Int8 = 0
var size: Int64=10
5、使用数据类型时应尽可能使用Swift本身的数据类型,例如:
推荐使用:
let width = 120.0
let widthString = "Hello."
var deviceModels: [String]
var employees: [Int: String]
不推荐使用:
let width: NsNumber = 120.0
let widthString: NSString = "Hello."
var deviceModels: NSArray
var employees: NSDictionary
- 如果是存储属性,声明规范与变量或常量声明的规范一样。
- 如果是计算属性,声明规范类似于代码块,特别是在使用只读计算属性时,应尽量省略get语句。
推荐使用:
var fullName: String {
return firstName + "." + lastName
}
不推荐使用:
var fullName: String {
get {
return firstName + "." + lastName
}
}
代码排版
- 空行
- 空格
- 断行
- 缩进
空行
- 类型声明之前
- import语句前后
- 两个方法或函数之间
- 块注释或单行注释之前
- 一个源文件的两个片段之间
空格
1、赋值符号“=”前后各有一个空格。var 或let 与标识符之间有一个空格。所有的二元运算符都应该使用空格与操作符分开。一元操作符和操作数之间不应该有空格,如++、--等。
示例如下:
var a = 10
var c = 10
a += c + d
2、(2)小左括号“("之后,小右括号“)”之前不应该有空。
示例如下:
a = (a + b) / (c * d)
3、大左括号“{”之前有一个空格,示例如下:
while a == d {
n++
}
4、在方法或函数名与第一参数之间没有空格,后面的参数前应该有一个空格,参数冒号与数据类型之间也有一个空格。
推荐使用:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
...
}
不推荐使用:
func tableView ( _ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
...
}
断行
-
在一个逗号后面断开
-
在一个操作符前面断开,要选择较高级别的运算符(而非较低级别的运算符)断开
-
新的一行应该相对于上一行缩进两个级别(8个空格)。
例如:
(1)
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longName6
(2)
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longName6
//代码第(1)行的断开位置要比第(2)行的断开位置好。因为代码第(1)行断开位于括号表达式的外边,这是个较高级别的断开。
(3)
func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
}
//代码第(3)行是方法名断开,函数名断开的规则与方法的一样。
(4)
if longName1 == longName2
|| longName3 == longName4 && longName3 > longName4
&& longName2 > longName5 {
print(true)
}
//代码第4行是if判断语句,由于可能有很多长的表达式,断开的位置应在逻辑运算符处。
(5)
boolName1 = (longName3 == longNmae4)
? longName3 > longName4
: longName2 > longName5
//代码第(5)行是三元运算符的断开。
缩进
-
在函数、方法、闭包、控制语句、计算属性等包含大括号“{}”的代码块中,代码块的内容相对于首行缩进一个级别(4个空格)。
-
如果是if语句中条件表达式的断行,那么新的一行应该相对于上一行缩进两个级别(8个空格),再往后的断行要与第一次的断行对齐。
如上图:代码第1行和第2行是if语句条件表达式的断行,代码第1行和第2行要对齐。
网友评论