七个Swift中的陷阱以及避免方法
Posted Cocoa开发者社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七个Swift中的陷阱以及避免方法相关的知识,希望对你有一定的参考价值。
来源:
文章总结翻译自:
Swift正在完成一个惊人的壮举,它正在改变我们在苹果设备上编程的方式,引入了很多现代范例,例如:函数式编程和相比于OC这种纯面向对象语言更丰富的类型检查。
Swift语言希望通过采用安全的编程模式去帮助开发者避免bug。然而这也会不可避免的产生一些人造的陷阱,他们会在编译器不报错的情况下引入一些Bug。这些陷阱有的已经在中提到,有一些还没有。这里有七个我在去年遇到的陷阱,它们涉及Swift协议扩展、可选链和函数式编程。
协议扩展:强大但是需要谨慎使用
一个Swift类可以去继承另一个类,这种能力是强大的。继承将使类之间的特定关系更加清晰,并且支持细粒度代码分享。但是,Swift中如果不是引用类型的话(如:结构体、枚举),就不能具有继承关系。然而,一个值类型可以继承协议,同时协议可以继承另一个协议。虽然协议除了类型信息外不能包含其他代码,但是协议扩展(protocol extension)可以包含代码。照这种方式,我们可以用继承树来实现代码的分享共用,树的叶子是值类型(结构体或枚举类),树的内部和根是协议和与他们对应的扩展。
但是Swift协议扩展的实现依然是一片新的、未开发的领域,尚存在一些问题。代码并不总是按照我们期望的那样执行。因为这些问题出现在值类型(结构体与枚举)与协议组合使用的场景下,我们将使用类与协议组合使用的例子去说明这种场景下不存在陷阱。当我们重新改为使用值类型和协议的时候将会发生令人惊奇的事。
开始介绍我们的例子:classy pizza
假设这里有使用两种不同谷物制作的三种Pizza:
enum Grain {
case
Wheat, Corn }
以上是关于七个Swift中的陷阱以及避免方法的主要内容,如果未能解决你的问题,请参考以下文章
七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.(代码片段