本文共 1185 字,大约阅读时间需要 3 分钟。
\\\看新闻很累?看技术新闻更累?试试,每天上下班路上听新闻,有趣还有料!
\
Xcode 9.3中的带来了一些语言上的提升,包括Equatable
和Hashable
协议的自动实现和条件一致性等。
条件一致性
\\即,泛型类型只有在其类型参数满足特定要求的时候才会遵循某个协议。例如,一个Array
只有当它的元素也遵循Equatable
协议的时候,才能实现Equatable协议。这可以用下列声明表示。
\extension Array: Equatable where Element: Equatable {\ static func ==(lhs: Array, rhs: Array) -\u0026gt; Bool { ... }\}\\\
这弥补了Swift泛型上的缺陷,使得泛型适配器类型(例如,反映组合类型能力的泛型类型)完全成为可能。例如,在Swift 3中存在4种不同的处理“懒”项目的泛型类型:LazySequence
、LazyCollection
、LazyBidirectionalCollection
和LazyRandomAccessCollection
。其中每一种类型都重新实现或者继承了和组合类型相同的API。使用条件一致性,某一种类型的Sequence可以声明遵循懒协议,而无需定义任何中间泛型类型。
Synthesized ==
and hashValue
Swift 4.1编译器能够为那些声明遵循Equatable
和Hahable
协议的structs和enums,。以前,开发者必须自己实现那些方法,而那是一件非常繁琐的任务:在通常情况下,==
方法的实现必须比较structs或unions的每一个相应成员;而hashValue
方法必须设法保证返回一个唯一的字符串。在Swift 4.1,开发者只需声明遵循那些协议,相关的方法就会自动生成,提供所有存储的分别符合Equatable
或Hashable
的属性或枚举值。
Swift 4.1中的其它显著改变如下:
\\\let s = \"Hashable\"\let p = \\String.[s.startIndex]\s[keyPath: p] // \"H\"\\\ 。KeyPath现在支持下标、可选的链接和可选的强制换行。 \\ 。 \\ 与classes已存在的限制相似, 。在访问struct字段前,struct必须已经调用
self.init
进行了初始化。\\\ 想要全面了解所有变更,你可以访问官方的。
\\查看英文原文:
\\感谢对本文的审校。
\给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博(,),微信(微信号:)关注我们。
转载地址:http://gnxkl.baihongyu.com/