写点什么

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:002118

评论

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

索信达首席科学家张磊:以AI创新技术满足金融场景的“私人定制”

索信达控股

大数据 数字化转型 银行数字化转型

Vue进阶(幺捌伍):动态设置系统字体

No Silver Bullet

Vue 7月日更 字体设置

图解堆排序,带你彻底了解清楚!

程序员的时光

Java 面试 算法 排序算法 堆排序

图扑软件受邀核电数字化技术大会,技术创新助力行业革新

一只数据鲸鱼

数据可视化 核电 核电站 数字大会

Serverless 时代下大规模微服务应用运维的最佳实践

阿里巴巴中间件

云计算 Serverless 微服务 云原生 中间件

工卡融合柔性屏,办公效率和信息安全性可能会有质的飞跃?

船医特拉法尔加

Vue进阶(幺零六):子组件处理父组件异步值传递给子组件处理

No Silver Bullet

Vue 组件 监听 7月日更

《面试补习》- 你来说说什么是限流?

九灵

Java 面试 分布式 sentinel 限流

Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow

华为云开发者联盟

git 软件开发 工作流 GitFlow GitHubFlow

极狐 GitLab 初探(上)

极狐GitLab

ci DevOps gitlab CD 敏捷开发管理

对产品来说,颜值、体验是不是很重要?

石云升

用户体验 职场经验 7月日更

手写QuickSort算法

实力程序员

程序员 算法 成长 C语言

通证经济最核心的价值,就是带来了流动性的质变

CECBC

EasyRecovery深度扫描以恢复桌面遗失数据的方法

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

数据驱动决策,可视化推动传统电力发展革命史?

一只数据鲸鱼

数据可视化 智慧能源 水力发电 智慧水利

IPFS挖矿值得投资吗?IPFS挖矿前景如何?

牙膏踩爆!Intel 5nm工艺曝光:直逼IBM 2nm

E科讯

带你换个角度理解图卷积网络

华为云开发者联盟

神经网络 卷积神经网络 图神经网络 卷积 图网络

超视频化到来,你能看见什么?

阿里云CloudImagine

阿里云 计算机视觉 音视频 视频 视频云

Jira 要停售本地私有化部署的版本了,这对国产项目管理软件是机会吗?

万事ONES

项目管理 Atlassian Jira ONES

Go 学习笔记之 方法

架构精进之路

Go 语言 7月日更

对话系统简介与OPPO小布助手的工程实践

OPPO小布助手

人工智能 对话 智能助手 智能对话

北鲲云超算平台解决生物科学领域困境,探索更多可能性

北鲲云

万万没想到,低功耗也会烧毁元器件?

不脱发的程序猿

嵌入式 电路设计 低功耗 ADI 稳压器

怎么借助Camtasia给电脑游戏录屏

淋雨

视频剪辑 Camtasia 录屏

什么是网络单纯型算法

华为云开发者联盟

算法 线性规划 网络单纯型 计算矩阵

ARTS 打卡计划-1

语霖

IPFS算力挖矿排行榜,IPFS挖矿公司排行榜

官宣!DataPipeline2021数据管理与创新大会将于7.29北京重装开启!

DataPipeline数见科技

大数据 数据融合 数据管理

架构之:REST和RESTful

程序那些事

微服务 软件架构 程序那些事

建立对分布式锁的系统认知-从Redlock开始

刘绍

程序员 分布式 分布式锁 RedLock redisson

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