Swift 4.1带来条件一致性等语言上的提升

2020腾讯云共同战“疫”,助力行业复工(优惠前所未有!),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1053

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

看新闻很累?看技术新闻更累?试试 下载InfoQ手机客户端 ,每天上下班路上听新闻,有趣还有料!

Xcode 9.3中的 Swift 4.1 带来了一些语言上的提升,包括 EquatableHashable 协议的自动实现和条件一致性等。

条件一致性

条件一致性 即,泛型类型只有在其类型参数满足特定要求的时候才会遵循某个协议。例如,一个 Array 只有当它的元素也遵循 Equatable 协议的时候,才能实现Equatable协议。这可以用下列声明表示。

extension Array: Equatable where Element: Equatable {
  static func ==(lhs: Array
<element>
 , rhs: Array
 <element>
  ) -> Bool { ... }
}

 </element>
</element>

这弥补了Swift泛型上的缺陷,使得泛型适配器类型(例如,反映组合类型能力的泛型类型)完全成为可能。例如,在Swift 3中存在4种不同的处理“懒”项目的泛型类型: LazySequenceLazyCollectionLazyBidirectionalCollectionLazyRandomAccessCollection 。其中每一种类型都重新实现或者继承了和组合类型相同的API。使用条件一致性,某一种类型的Sequence可以声明遵循懒协议,而无需定义任何中间泛型类型。

Synthesized == and hashValue

推荐:Kotlin和Swift在Redmonk语言排行榜上的排名大幅提升

[看新闻很累?看技术新闻更累?试试 下载InfoQ手机客户端 ,每天上下班路上听新闻,有趣还有料! 行业分析公司 Redmonk 发布了2018年 第一季度编程语言排行榜 。排名靠前的

Swift 4.1编译器能够为那些声明遵循 EquatableHahable 协议的structs和enums, 生成 ==hashValue 方法的实现 。以前,开发者必须自己实现那些方法,而那是一件非常繁琐的任务:在通常情况下, == 方法的实现必须比较structs或unions的每一个相应成员;而 hashValue 方法必须设法保证返回一个唯一的字符串。在Swift 4.1,开发者只需声明遵循那些协议,相关的方法就会自动生成,提供所有存储的分别符合 EquatableHashable 的属性或枚举值。

Swift 4.1中的其它显著改变如下:

想要全面了解所有变更,你可以访问官方的 变更日志

查看英文原文: Swift 4.1 Brings Conditional Conformance and More

感谢罗远航对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。

相关推荐