- 主类和文件名保持一致,接近OC的风格
- 命名采用添加有意义后缀的方式,采用苹果推荐的驼峰法
- 数据类型,
Model
定义用struct,enum
- 在
ViewWillLaysubview
中调整限制 - 可选类型相关操作,多用
?
,少用!
XCode自动生成的
IBOutlet
保持默认
在用!
之前做!=nil
判断
命名不要用common,public等,防止失控
Framework,扩展Struct来模拟命名空间,不需要前缀命名来避免冲突
defer
和Guard
配对使用,将申请资源和释放资源写在一起,增加可读性和安全性Swith
默认不要default
,有必要的时候才加静态表格用
TableViewController
;其他情况,包括动态表格,用ViewController
Segue, Storyboard ID
可以和目标ViewController
同名;cell ID可以和cell同名;这样处理起来方便Any,AnyObject
尽量不要用;提倡用泛型来达到OC的动态特性,也可以定义一个共同的protocol
,来聚合不同的类型鼓励用enum,带附加变量的那种
不推荐用返回函数的函数,推荐将函数当做参数的方式
不推荐函数里面套函数的方式
frame的接口函数可以写成全局的函数。仅仅是top level函数,其他的还是尽量放在某个class里面,参考Alamofire这个第3方库的处理方式
= {}()
形式的初始化最好跟lazy关键字一起使用(可以用self),其他情况尽量都放在init函数中; 静态变量初始化时可以酌情使用(self是否能使用是需要考虑的问题)如果有唯一个的含义,就用单例替代全局变量,单例是class类型的,继承自
NSObject
比较好函数名和
(
之间不要有空格,)
和{
之间空一格。enum和struct主要用来表示数据结构,比如ViewModel,命令枚举等等;class主要表示行为,交互,协作等,比如controller,logic等等
继承级数在3级以内,推荐以系统的为基础,只进行1级继承;用扩展
extension
比较好protocol
和extension
结合起来用,并且分开写,像系统类型做的那样。这样相当于基类,对于enum,struct也可以有很多共同基类。用
extension
来提供protocol
的默认实现,和protocol的定义写在同一个文件中,相对于oc中的可选成员。用
extension
对文件进行分模块。存储型变量不能放在extension
中,这点要注意。但是计算型的可以。用
if let
或者guard let
解包的时候,可以使新变量的名字和可选型的变量名一样,减少取名字的困惑