Swift 风格指南
原则
- 对于命名,在使用时能够清晰表意最重要。因为
API
被使用的次数要远远多于被声明的次数,所以我们应当从使用者的角度来考虑它们的名字。尽快熟悉 Swift API 设计准则, 并且在你自己的代码中坚持使用这些准则。
- 简洁有助于代码清晰,但是简洁本身不应该独自称为我们编码的目标。
- 务必为函数添加文档注释 —— 特别是
泛型函数
。
- 类型使用大写字母开头,函数、变量和枚举成员使用小写字母开头,两者都使用驼峰命名法。
- 使用类型推断。省略掉显而易见的类型会有助于提高可读性。
- 如果存在歧义或者在进行定义的时候不要使用类型推断。(比如
func
就需要显示的指定返回类型)
- 优先选择结构体,只有在确实需要使用到类特有的特性或者是引用语义时才使用类(封装,继承,多态)
- 除非你的设计就是希望某个类被继承使用,否则都应该将它们标记为
final
。(只有确定某个类功能已完整才用)
- 除非一个闭包后面立即跟随有左括号,否则都应该使用尾随闭包(
trailing closure
)的语法。
- 使用
guard
来提早退出方法。
- 避免对可选值进行强制解包和隐式强制解包。它们偶尔有用,但是经常需要使用它们的话往往意味着有其他不妥的地方。
- 不要写重复的代码。如果你发现你写了好几次类型的代码片段的话,试着讲它们提取到一个函数里,并且考虑将这个函数转化为协议扩展的可能性。
- 试着去使用
map
和 reduce
,但这并不是一定的。有时候使用for
循环更合适。高阶函数的意义是让代码可读性更高。但是如果使用reduce
的场景难以理解的话,强行使用往往事与愿违,这时候简单的for
循环逻辑可能会更清晰。
- 试着去使用不可变值:除非你需要改变某个值,否则都应该使用
let
来声明变量。不过如果能让代码更加清晰高效的话,也可以选择使用可变的版本。用函数将可变的部分封装起来, 可以把它带来的副作用进行隔离。
Swift
的泛型可能会导致非常长的函数签名。坏消息是我们现在除了将函数声明强制写成几行以外,对此并没有声明好办法。
- 除非你确实需要,否则不要使用
self.
。在闭包表达式中,使用self
是一个清晰的信号,表明闭包将会捕获self
。
- 尽可能地对现有的类型和协议进行拓展,而不是写一些全局函数。这样有助于提高可读性,让别人更容易发现你的代码。