Swift编码风格

  编码风格是一个比较古老的话题,一般认为它最早是在布里安·柯尼汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合作出版的《The C Programming Language》一书中出现的,这一风格也被称之为K&R风格。现在大多数程序员使用的编码风格是Google编码风格。虽然对于机器而言,编码风格并没有什么卵用,但是对于程序员而言,良好的编码风格还是非常的重要。因此,我们应该在日常编码过程中自觉养成良好的编码习惯。

  尽管Xcode非常强大,有很多编码格式已经不需要我们手动去调整,但是还是有一些编码风格是编程工具无法帮我们去完成的,所以我们还是有必要学习一些他人总结的好的编码规范。

  1、命名最好做到见名知意

  在代码中命名过程中,最好是能清楚的表述代码的意思。一个毫无意义的命名会增加代码阅读者的困惑,非常不利于自己后续维护,也不利于和其他人进行交流。关于代码命名规范,可以参考苹果官方的Swift API设计准则。

  2、类型最好是用驼峰标识

  与这一点有关的内容参见《Swift命名规范》

  3、尽可能的使用let

  在声明一个变量时,尽量使用let,以防止变量被意外修改,从而保证程序的安全性。一个引用类型的变量也可以使用let来声明。使用let声明的引用类型,只是引用本身被常量化了,并不是指它引用的对象被常量化。也就是说,你不能再给这个引用赋一个新的值,但是,该引用所指向的对象却是可以改变的。比如说:

// 引用本身是常量
let view = UIView()

// 但是可以改变引用对象的内容
view.backgroundColor = .red  // 这里代码不会出错

// 不过不能再给这个引用赋一个新的值
view = UIView()  // 这里代码会出错

  4、尽量使用类型推断

  Swift的编译器非常强大,它可以根据字面量来推断具体的类型。所以,为了提高代码的阅读性,尽量不要使用显而易见的类型声明。除非不加类型声明容易产生歧义,比如说:

// 这是一个Array类型的数组
let arr = ["LeBron James", "Carmelon Anthony", "Dwyane Wade", "Chris Paul"]

// 这是一个Set类型的集合
let set: Set = ["LeBron James", "Carmelon Anthony", "Dwyane Wade", "Chris Paul"]

  像上面声明一个Set类型的集合时,如果省略类型Set,编译器就会直接将其推断为Array类型。还有,集合类型一般是指Array、Set和Dictionary的总称,但是有时候我们也会把Set类型的变量或者常量也称之为集合。在碰到别人说“集合”时,应该根据上下文意思来理解他到底是在说Set,还是在说Array、Set和Dictionary这一类的总称。其实这个也没什么好说的。

  5、优先使用结构体

  在Swift中,结构体的功能非常强大,它也具有面向对象的特性。一般而言,如果不是需要使用类才具有的特性时,尽量使用结构体。关于什么时候使用结构体,什么时候使用类,详情参见《Swift中常用的数据结构(上)》中第一部分的内容,或者直接查看苹果官方文档Classes and Structures的内容。

  6、使用final标记

  在设计类时,如果不是用来作为其他类的父类(或者说这个类不需要子类),应该将它标记为final。

  7、学会使用guard

   guard语句几乎可以完成if语句的所有功能,但是有时候使用guard比使用if语句阅读性要好,尤其是在替代if-else嵌套语句时,guard语句的优势十分明显。另外,在方法中最好是使用guard提早退出方法。

  8、尽量使用尾随闭包

  如果不是使用闭包作为返回值,尽量使用尾随闭包。

  9、尽可能的少用强制解包

  不管是强制解包还是隐式强制解包,它都是一个非常危险的操作,使用不当很容易造成程序崩溃。比较好的习惯是使用if或者guard进行安全校验。

  10、熟练的抽取重复的代码

  不管是出于代码简介层面的考虑,还是出于代码复用的角度考虑,你都应该将相似的代码片段抽取到一个函数里,甚至还可以考虑将这个函数转化为协议扩展。

  11、尽量少些self.

  如果代码不会出现歧义,或者是因为其它需要,尽量不要写self.。

  12、尽量少写全局函数

  出于代码阅读性方面的考虑,尽可能多的对现有的类型和协议进行相应的扩展,而不是一味的去写全局函数。

  关于Swift编码风格的话题暂时先写到这里,以后如果学到更多有关的知识,再回过头来进行相应的补充。

你可能感兴趣的:(Swift编码风格)