澳门太陽城集团登录网址即使你的品种早已更新到了Swift

Apple终于发布了Xcode 8.3以及Swift 3.1。如果你没时间仔细通读一遍release
note,至少,Swift
3.1中的一些新特性还是值得了解的,为此,我们特别制作了一个免费的内容系列。当然,Swift
3.1和Swift 3在源代码级别是兼容的,因此,如果你的项目已经更新到了Swift
3,这次更新应该不会给你带来太多麻烦。但是,Xcode 8.3去掉了对Swift
2.3的支持,所以,如果你还停留在更早版本的Swift上,就还是谨慎更新的为好。

接下来,我们就简单介绍下这个系列里的内容。

SE-0080 数值类型的failable initialize

这是SE-0080带来的改进。例如,之前,当我们把一个Double强制转换成Int澳门太阳集团城网址,澳门太陽城集团登录网址,的时候,Swift会自动取消小数点后的部分。当我们需要在不同的数字类型之间执行“无损”的精度转换时,这个功能就非常有用,当转型会导致精度丢失的时候,init(exactly:)方法会给我们返回nil。我们通过一个最常见的场景:解析服务器返回的JSON,向大家展示了这个功能的具体用法。

SE-0045 Sequence中新添加的两个筛选元素的方法

prefix(while:)drop(while:)是Swift
3.1中新加入到Sequence类型的两个API方法,通过它们,可以帮助我们更有效的编写在Sequence中筛选元素的方法。特别是,如果我们要在一个无限序列中筛选元素,它们就显得更方便了。

SE-0103 临时转换成escaping的closure

就像SE-0103中描述的一样,在Swift
3里,函数的closure类型参数默认从escaping变成了non-escaping。这很好理解,因为大多数用于函数式编程的closure参数的确都以non-escaping的方式工作。

但这份提议也提到了一个问题,就是有时候,我们需要把non-escaping属性的closure,传递给需要escaping属性closure的函数。什么时候需要这种场景呢?也许你在其他地方看到的解释是:这是一个不太常见的用法。

澳门太陽城集团登录网址即使你的品种早已更新到了Swift。SE-0141 通过available约束Swift版本

虽然之前我们可以通过#澳门太陽城集团登录网址即使你的品种早已更新到了Swift。if这样的形式达到版本控制的目的,但如果我们用这样的方式编写程序库,就会有一个不太方便的地方。编译器要为它支持的每一个Swift版本都独立编译一遍。于是,如果在一个Swift
ABI累积性更新之间兼容了多个Swift版本,那么携带这段时间编写的程序库就是一个比较笨重的事情。一个更好的办法,当然应该是只编译一次,然后在生成的程序库包含每个API可以支持的Swift版本。

澳门太陽城集团登录网址即使你的品种早已更新到了Swift。为此Swift
3.1中,对@available进行了扩展,我们不仅可以用它来约束操作系统,还可以指定Swift的版本。

SR-1009 使用具象类型约束泛型参数

在Swift
3.0中,如果我们要为某个特定类型的Optional添加extension,不是一件太容易的事情。我们得通过用protocol约束一个类型相同的computed
property来模拟某个具象类型的约束。但在Swift
3.1里,这个缺陷被弥补了,我们不仅可以对泛型参数使用protocol进行约束,还可以使用具象类型作为类型约束,这有点儿像C++泛型中的模板偏特化技术。

SR-1446 关于内嵌类型的两种改进

这一部分,我们来聊聊和内嵌类型有关的话题。在Swift
3.1里,内嵌类型有了两方面的改进:

  • 普通类型的内嵌类型可以直接使用其外围类型的泛型参数,此时它仍旧是一个普通类型;

  • 泛型类型的内嵌类型可以拥有和其外围类型完全不同的泛型参数;

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图