swift 4.2 官方文档学习笔记(十三)- Extension

Sellen Wei
Dec 18, 2018

--

扩展可以为一个类型添加新的功能,但是不能重写已有的功能。

  1. 标准写法:

2. 扩展属性

3. Extensions can add new initializers to existing types.

Extensions can add new convenience initializers to a class, but they cannot add new designated initializers or deinitializers to a class. Designated initializers and deinitializers must always be provided by the original class implementation.

4. Extensions can add new instance methods and type methods to existing types.

5. Subscripts

6. Nested Type

三年后的总结:

其实我个人是非常讨厌extension的,同事在同一个file或者几个file里面添加extension,根本不方便函数的查找,extension protocol也会实现一些函数,实现后的函数也是没有办法在继承的class里面修改的,所以我个人也是非常讨厌这个插入方式。

但是查了资料之后发现,原来这种代码的风格是现在所推崇的,为了代码更方便管理,更好看:

4 trick to use extension

但是查了一下,Protocol Conformance 看起来是一个业界推崇的管理方式,好处是可以让隶属于某个protocol的function全部group到一起

另外extension也可以解决struct default initiallizer被改写取代的问题,比如这个例子,如果在原有的struct里面添加新的init,那么default init就不可用了。

Group constants/Computed Properties

Extension也可以用来把constant变成nested type来存储,感谢我的同事,我们现在几乎所有的constant都是这个模式存储的,好处是看起来无比干净,不用把所有constant放在file一起,显得很乱。

  • Default Protocol Implementation :

不要忘记,protocol的默认实现也是可以放在extension里面的哦!

Four Clever Uses of Swift Extensions

Use of Swift Extensions in an expert way

--

--