写点什么

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

  • 2018-02-23
  • 本文字数:1055 字

    阅读完需:约 3 分钟

看新闻很累?看技术新闻更累?试试下载 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

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

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

复制代码
let s = "Hashable"
let p = \String.[s.startIndex]
s[keyPath: p] // "H"
  1. 完全实现智能 KeyPaths 。KeyPath 现在支持下标、可选的链接和可选的强制换行。
  2. weakunowned关键词不能再用于协议中的属性声明
  3. 与 classes 已存在的限制相似, Swift structs 不再允许在一个不同的模块中定义一个初始化器来直接初始化 struct 的字段。在访问 struct 字段前,struct 必须已经调用self.init进行了初始化。
    想要全面了解所有变更,你可以访问官方的变更日志

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


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

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

2018-02-23 18:001724

评论

发布
暂无评论
发现更多内容

Solana Blink和SEND的崛起:技术与市场效应的结合

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

我的数据清洗能手小浣熊

轻口味

征文活动 办公小浣熊 小浣熊家族

什么是汽车虚拟仿真vr技术?

3DCAT实时渲染

汽车虚拟仿真 云VR看车 云车展

给 「大模型初学者」 的 LLaMA 3 核心技术剖析

Baihai IDP

AI 白海科技 LLMs 企业号 7 月 PK 榜 Llama3

暑假肯吃苦,秋招猛如虎

王中阳Go

Go 数据库 redis 面试 面经

小间距LED显示屏:未来市场的百亿级潜力

Dylan

技术 发展 LED LED显示屏 市场

信创里程碑:TapData 与 OceanBase 产品完成兼容互认证,加速推进金融等传统行业自主创新与数字化革新

tapdata

oceanbase 信创国产化 TapData 实时数据平台 国产信创数据库

一个老程序员对小浣熊 AI 办公助手的使用体验

汪子熙

Python 人工智能 办公小浣熊 小浣熊家族 小浣熊

ToB活动营销痛点——用最少场次的活动投入覆盖最多的目标客户

客户在哪儿AI

ToB获客 ToB增长 ToB销售

万字长文—带你深度体验小浣熊办公助手,全方位提升工作效率

数字扫地僧

办公小浣熊 代码小浣熊 小浣熊家族

代码数据两不误,小浣熊请求出战

法医

AI

真·我的上班搭子之有小浣熊的一天——分分钟完成万条人事数据分析

Geek_cc71cf

办公小浣熊 代码小浣熊 小浣熊家族 小浣熊

客户在哪儿AI分享全方位锁定客户“追着打”的有效方法

客户在哪儿AI

ToB营销 ToB增长 ToB销售

2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。 一个子数组nums[i.

福大大架构师每日一题

福大大架构师每日一题

上班摸鱼全靠AI办公助手-小浣熊

不叫猫先生

AI 办公小浣熊 办公助手

Swift 4.1带来条件一致性等语言上的提升_开源_Sergio De Simone_InfoQ精选文章