Swift 的拜访权限操控有一个关键字是 final
,加了 final
后表示这个类便是最终的样子了。有两个效果:
- 不能被 override,由于是最终版了,所以不能被改。
- 优化执行功能。由于一切的办法调用只要一个清晰途径(不存在子类),不需求到 vtable 中去查一下。
听起来为了规范,一切的不需求考虑承继的类都应该加上 final
,可是一个项目里这么多类都加上其实也有点累人。很多人不知道的是其实有一些场景不需求自己手动增加。
私有类/属性不用增加
假如你的类的拜访属性是 private
或者 fileprivate
,由于只要在当前文件才能被拜访,天然就不存在被外部拜访承继的可能性,编译器会自动揣度增加 final。所以这种情况下不用增加 final
。
默许拜访权限(internal)也不用加
假如咱们不增加拜访权限,默许的拜访权限的级别是 internal
,表示只要当前 framework 内可以被拜访。假如咱们挑选的编译形式是Whole Module Optimization (WMO),那么咱们也不需求手动增加 final
。
由于 WMO 会把一切文件合并到一同进行功能优化,因而编译器知道一个类是否有子类,因而可以自动揣度增加。
默许 release 的编译形式便是 Whole Module。
当然假如你是几个人维护一个项目,这个你写的类主观上不希望被承继,增加 final 是为了警示未来的使用者,那么自动增加也是一个好习惯。起到强文档的效果。
Public 需求自动加
假如你供给的是一个库给上层调用,增加了 public
后需求自动判别是否需求增加 final
。由于标记了 public 类的调用者是未知的,假如不增加默许便是支撑被承继的。假如你的类不支撑承继,自动增加 final
可以优化功能。