Swift 4.0 编码规范
1.编码格式
每行最多160个字符,这样可以避免一行过长。 (Xcode->Preferences->Text Editing->Page guide at column: 设置成160即可)
确保每行都不以空白字符作为结尾 (Xcode->Preferences->Text Editing->Automatically trim trailing whitespace + Including whitespace-only lines).
使用二元运算符(+, -,==, 或->)的前后都需要添加空格
1
let value = (1 + 2) * 3在逗号、冒号后面加一个空格
1
2let arr = [1, 2, 3]
let dict = ["123": 123]方法的左大括号不要另起,并和方法名之间留有空格,注释空格
1
2
3
4// 注释
func makeSomething {
// coding
}判断语句不用括号
1
2
3if isTrue = true {
// coding
}方法的左大括号不要另起,并和方法名之间留有空格,注释空格
1
2
3if isTrue = true {
// coding
}尽量不使用self. 除非方法参数与属性同名
1
2
3
4func setContent(name: String, count: Int) {
self.name = name
c = count
}在访问枚举类型时,使用更简洁的点语法
1
2
3
4
5
6
7enum ShareToPlatform {
case WX
case TimeLine
case QQ
case Sina
}
let platform = .QQ使用 // MARK: -,按功能、协议、代理等分组
1
2
3
4
5// MARK: - UITableViewDelegate
// MARK: - Action
// MARK: - Request使用extension 隔离方法集,相关协议、类似功能放在一个extension里
1
2
3
4// MARK: - UICollectionViewDelegate
extension JLViewController: UICollectionViewDelegate {
// 代理方法
}当对外接口不兼容时,使用@available(iOS x.0, *) 标明接口适配的起始系统版本号
1
2
3
4@available(iOS 10.0, *)
func handleSome() {
//
}
2.命名规范
- 常量,变量,函数,方法的命名规则使用小驼峰规则,首字母小写,类型名使用大驼峰规则,首字母大写。
1
2
3
4@available(iOS 10.0, *)
func handleSome() {
//
} - 当命名里出现缩写词时,缩写词要么全部大写,要么全部小写,以首字母大小写为准
1
2
3
4
5
6
7let htmlString = "https://www.baidu.com"
let urlString: URLString
let userID: UserID
class HTMLModel {
//
} - bool类型命名时,使用is作为前缀
1
var isHave: Bool = false - 使用前缀 k + 大骆驼命名法 为所有非单例的静态常量命名。
1
2
3
4
5
6
7
8
9class MyClassName {
// 基元常量使用 k 作为前缀
static let kSomeConstantHeight: CGFloat = 80.0
// 非基元常量也是用 k 作为前缀
static let kDeleteButtonColor = UIColor.redColor()
// 对于单例不要使用k作为前缀
static let sharedInstance = MyClassName()
/* ... */
}3.代码风格
- 如果需要把访问修饰符放到第一个位置。
- 尽可能的多使用let,少使用var。
- 当需要遍历一个集合并变形成另一个集合时,推荐使用函数 map, filter 和 reduce。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// 推荐
let stringOfInts = [1, 2, 3].flatMap { String($0) }
// ["1", "2", "3"]
// 不推荐
var stringOfInts: [String] = []
for integer in [1, 2, 3] {
stringOfInts.append(String(integer))
}
// 推荐
let evenNumbers = [4, 8, 15, 16, 23, 42].filter { $0 % 2 == 0 }
// [4, 8, 16, 42]
// 不推荐
var evenNumbers: [Int] = []
for integer in [4, 8, 15, 16, 23, 42] {
if integer % 2 == 0 {
evenNumbers(integer)
}
} - 如果变量类型可以依靠推断得出,不建议声明变量时指明类型。
- 不要使用 as! 或 try!。
- 我们推荐使用提前返回的策略,而不是 if 语句的嵌套。使用 guard 语句可以改善代码的可读性。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 推荐
func eatDoughnut(atIndex index: Int) {
guard index >= 0 && index < doughnuts else {
// 如果 index 超出允许范围,提前返回。
return
}
let doughnut = doughnuts[index]
eat(doughnut)
}
// 不推荐
func eatDoughnuts(atIndex index: Int) {
if index >= 0 && index < donuts.count {
let doughnut = doughnuts[index]
eat(doughnut)
}
}
4.注释规范
- MARK,用于方法或函数的注释。加上 ‘-’ 再函数列表会多一个横线分割
1
2// MARK: - 描述内容
// MARK: 描述内容 - TODO,表示这里代码有没有完成,还要处理。加上 ‘-’ 再函数列表会多一个横线分割
1
2// TODO: - 描述内容
// TODO: 描述内容 - FIXME,需要修改代码,bug等。加上 ‘-’ 再函数列表会多一个横线分割,且显示的icon 与mark和todo不通,更醒目
1
2// FIXME: - 描述内容
// FIXME: 描述内容 - 添加文档注释(xcode 快捷键⌘⌥/)
1
2
3
4
5
6/// 获取用户的帐密信息
///
/// - Returns: 信息元组的 Observable
func fetchLocalInfo() -> Observable<(String, String)?> {
// coding
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!