The dateFromString() function is great.
Call convertPointAt(column:, row:) from your init() method.
The return value of timedAction(delay:, perform:) may be nil.
Guideline objects only have two methods: combineWithString(options:) and upvoteBy()
You shouldn't call the data source method tableView(cellForRowAtIndexPath:) directly.
本风格指南的目标是让Swift代码更简洁、可读更强。
语言
推荐使用跟苹果API文档风格统一的英语。
推荐:
不推荐:
空白
Tab
制表符,请务必在Xcode
中进行设置;if
/else
/switch
/while
等)中的左括号写在当前语句的结尾,右括号需要另起一行。推荐:
不推荐:
注释
只有在必要的时候才写注释来解释某段代码为什么那么做。注释必须跟代码同步更新,该删掉时就删掉。
尽量避免使用多行注释,而是让代码本身去解释自己的功能。
命名
使用可描述性的驼峰式命名法为类、函数、方法、变量等命名。模块中的类名和常量名首字母需要大写,而方法名和变量名的首字母需要小写。
推荐:
不推荐:
对于函数和构造器(
init
),除非能一目了然,否则建议为每个参数命名。如果能让函数可读性更强,请提供每个参数的外部参数名。对于类中的方法,请遵循苹果惯例,将方法名作为第一个参数的外部名:
如果在非代码文本(包括教程、书籍以及注释中)中引用了某个函数,请提供函数所有参数的外部参数名:
类前缀
Swift中的模块(
module
)包含了命名空间,所有在模块中定义的类型名都不会与其它模块冲突。所以我们不再需要使用前缀命名来减少命名冲突。如果两个来自不同模块的相同名字需要同时引用,你可以使用模块名+点+类型名的方式来处理:再次重申,请不要在Swift类型命名时加前缀。
如果你需要将Swift类型暴露给Objective-C,你可以为其指定一个在
Objective-C
中使用的合适前缀(请参考ObjC编程风格指南:分号
Swift不需要在每条语句后加分号。但如果将多条语句写在一行代码中,这时需要加上分号。
然而我们并不推荐这种将多行语句写在一行的做法。
唯一例外是
for-conditional-increment
结构,它必须使用分号。但你应该尽量使用for-in
结构来替代这种行为:推荐:
不推荐:
类和结构体
请将类和结构体中的代码按以下顺序进行组织:
上面的例子还展示了以下风格:
x: Int
和Circle: Shape
;getter
、setter
以及属性观察器willSet
和didSet
的实现都需要缩进;Self 的使用
请避免在Swift中使用
self
,因为我们不需要使用self
来访问一个对象的属性或调用它的方法。唯一需要使用的场景是在类或结构体的构造器中。你可以使用
self
来区分传入的参数和类/结构体的属性:函数定义
尽量将较短的函数名定义在一行,并以一个左大括号结尾:
如果函数名较长,请在适当的时候换行,并对下一行函数名进行缩进:
闭包
请尽量使用
掉尾
(就是将最后一个闭包参数直接附在方法调用后,看起来像是控制语句的body一样)闭包语法。无论何时,请给闭包中每个参数一个描述性的名字:对于一行表达式闭包,当使用场景明确时,可以使用隐式返回:
类型
请尽量使用Swift提供的原生类型。Swift也提供了原生类型对象桥接到
Objective-C
对象的办法,所以必要时你能随意使用这些桥接对象提供的方法。推荐:
不推荐:
在
Sprite Kit
代码中,请多使用CGFloat
,这样代码会更简洁,也能避免非常多的类型转换。常量
常量使用
let
关键字定义,而变量使用var
关键字定义。如果一个值是常量,那就必须使用
let
关键字来准确定义。最终你会发现,你使用let
的频率远大于var
。可选
如果可以接受
nil
值,请将变量或函数返回值的类型定义为可选类型(加?
)。当你明确知道实例变量在使用前会完成初始化,比如说视图控制器中的子视图
subviews
在使用前会在viewDidLoad
中初始化,那么你可以将这些变量定义为隐式解析类型(使用!
)。当访问一个可选值时,如果只访问一次,或者方式时有多种可能性,请使用可选链:
使用可选绑定
optional binding
对只拆包(unwrap
)一次,但执行多次操作的情况非常合适:类型推断
Swift编译器可以推断出变量和常量的类型。你可以为每个常量或变量提供一个显示的类型(加个冒号,并在后面写上类型名),但大部分情况不必这么做。
我们建议多使用类型推断让编译器自动推断出常量或变量的类型,这样代码会更紧凑。
推荐:
不推荐:
流程控制
建议多使用
for-in
风格的for
循环,而不是传统的for-condition-increment
风格。推荐:
不推荐:
笑脸
笑脸在raywenderlich.com网站中是一个非常突出的特性。正确的使用笑脸来表达在编程时的一种极大的快乐和兴奋,至关重要。我们使用右方括号
]
,因为它代表了ASCII
艺术字符中最大的微笑;而使用右小括号)
的笑脸显得有点不那么诚心,所以我们不推荐使用。推荐:
不推荐: