编码习惯Swift

  1. 主类和文件名保持一致,接近OC的风格
  2. 命名采用添加有意义后缀的方式,采用苹果推荐的驼峰法
  3. 数据类型,Model定义用struct,enum
  4. ViewWillLaysubview中调整限制
  5. 可选类型相关操作,多用,少用

XCode自动生成的IBOutlet保持默认
在用之前做 !=nil 判断

  1. 命名不要用common,public等,防止失控

  2. Framework,扩展Struct来模拟命名空间,不需要前缀命名来避免冲突

  3. deferGuard 配对使用,将申请资源和释放资源写在一起,增加可读性和安全性

  4. Swith默认不要default,有必要的时候才加

  5. 静态表格用TableViewController;其他情况,包括动态表格,用ViewController

  6. Segue, Storyboard ID可以和目标ViewController同名;cell ID可以和cell同名;这样处理起来方便

  7. Any,AnyObject 尽量不要用;提倡用泛型来达到OC的动态特性,也可以定义一个共同的protocol,来聚合不同的类型

  8. 鼓励用enum,带附加变量的那种

  9. 不推荐用返回函数的函数,推荐将函数当做参数的方式

  10. 不推荐函数里面套函数的方式

  11. frame的接口函数可以写成全局的函数。仅仅是top level函数,其他的还是尽量放在某个class里面,参考Alamofire这个第3方库的处理方式

  12. = {}() 形式的初始化最好跟lazy关键字一起使用(可以用self),其他情况尽量都放在init函数中; 静态变量初始化时可以酌情使用(self是否能使用是需要考虑的问题)

  13. 如果有唯一个的含义,就用单例替代全局变量,单例是class类型的,继承自NSObject比较好

  14. 函数名和之间不要有空格, { 之间空一格。

  15. enum和struct主要用来表示数据结构,比如ViewModel,命令枚举等等;class主要表示行为,交互,协作等,比如controller,logic等等

  16. 继承级数在3级以内,推荐以系统的为基础,只进行1级继承;用扩展extension比较好

  17. protocolextension结合起来用,并且分开写,像系统类型做的那样。这样相当于基类,对于enum,struct也可以有很多共同基类。

  18. extension来提供protocol的默认实现,和protocol的定义写在同一个文件中,相对于oc中的可选成员。

  19. extension对文件进行分模块。存储型变量不能放在extension中,这点要注意。但是计算型的可以。

  20. if let或者guard let解包的时候,可以使新变量的名字和可选型的变量名一样,减少取名字的困惑

你可能感兴趣的:(编码习惯Swift)