在使用一些语句如else,catch等紧随代码块关键字的时候,确保代码块和关键字在同一行。
if someBoolean {
// 你想要什么
} else {
// 你不想做什么
}
do {
let fileContents = try readFile("filename.txt")
} catch {
print(error)
}
访问控制修饰符
如果需要把访问修饰符放到第一个位置。
// 推荐
private static let kMyPrivateNumber: Int
// 不推荐
static private let kMyPrivateNumber: Int
访问修饰符不应该单独另起一行,应和访问修饰符描述的对象保持在同一行。
// 推荐
public class Pirate {
/* ... */
}
// 不推荐
public
class Pirate {
/* ... */
}
默认的访问修饰符是internal,可省略不写。
当一个变量需要被单元测试 访问时,需要声明为 internal 类型来使用@testable import {ModuleName}。 如果一个变量实际上是private 类型,而因为单元测试需要被声明为 internal 类型,确定添加合适的注释文档来解释为什么这么做。这里添加注释推荐使用 - warning: 标记语法。
/**
这个变量是private 名字
- warning: 定义为 internal 而不是 private 为了 `@testable`.
*/
let pirateName = "LeChuck"
自定义操作符
不推荐使用自定义操作符,如果需要创建函数代替。
在重写操作符之前,请慎重考虑是否有充分的理由一定要在全局范围内创建新的操作符,而不是使用其他策略。
你可以重载现有的操作符来支持新的类型(特别是==),但是新定义的必须保留操作符原来的含义,比如==必须用来测试是否相等并返回布尔值。
switch语句和枚举
使用swift/80902.html">swift语句时,如果选项是有限集合时,不要使用default,相反的,把一些不用的选项放到底部,并用break关键词阻止其执行。
应为swift中的switch选项默认是包含break的,所以不需要使用break关键字。
case 语句 应和 switch 语句左对齐,并在 标准的 default 上面。
当定义的选项有关联值时,确保关联值有恰当的名称,而不只是类型。
enum Problem {
case attitude
case hair
case hunger(hungerLevel: Int)
}
func handleProblem(problem: Problem) {
switch problem {
case .attitude:
print("At least I don't have a hair problem.")
case .hair:
print("Your barber didn't know when to stop.")
case .hunger(let hungerLevel):
print("The hunger level is (hungerLevel).")
}
}
推荐尽可能使用fall through。
如果default 的选项不应该触发,可以抛出错误 或 断言类似的做法。
func handleDigit(digit: Int) throws {
case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9:
print("Yes, (digit) is a digit!")
default:
throw Error(message: "The given number was not a digit.")
}








