大模型“四虎”出山,亮相 4 月 QCon 北京。 了解详情
写点什么

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

评论

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

架构训练营模块 5 作业 - 江哲

江哲

整数划分问题(详解 n > m 情况)

若尘

数据结构 6月日更

Kubernetes手记(4)- 命令入门

雪雷

6月日更

C语言从入门到精通(二)

代码情缘

开发 C语言 编程、

Sprint Review != Demo——《Scrum指南》重读有感(4)

Bruce Talk

Scrum 敏捷 随笔 Agile

如何使用Tauri和Ember.js创建小型、快速和酷的桌面应用程序

代码先生

tauri ember.js desktop程序

戴着镣铐起舞的算法市场

脑极体

C语言从入门到精通(四)

代码情缘

编程 C语言 变量 编程之路 6月日更

JavaScript 代码逻辑判断的优化

编程三昧

JavaScript 大前端 代码质量 代码优化 编程思想

C语言从入门到精通(三)

代码情缘

编程 开发 C语言 编程之路 硬件开发

平衡计分卡- 战略落地的工具

石云升

创业 战略 职场经验 6月日更

Atlassian 最受欢迎的分析工具强势融入 Confluence Data Center!

Atlassian

DevOps 知识管理 Atlassian Jira Confluence

【Redis】概览

awen

redis

应用,才是区块链的终极归宿

CECBC

Bzz节点分币系统搭建,Bzz矿机挖矿系统

这个 “少年黑客”,用黑科技守护独居老人

阿里云CloudImagine

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

【译】编写整洁 React 代码的简单实践

KooFE

大前端 React 6月日更 整洁代码

程序员必知的硬核基础知识

Java架构师迁哥

轮胎行业遇上AI,百度智能云携手固铂轮胎智能化转型

百度大脑

智能云 轮胎

相似度计算-句子

Qien Z.

nlp 6月日更 tf-idf

Java程序员【面试】与【进阶】3个最佳学习方法

Java架构师迁哥

2021全球人工智能技术大会开幕 百度王海峰:跨语言沟通正在成为现实

百度大脑

人工智能 沟通 跨语言

Redis 缓存的三大问题及其解决方案

xcbeyond

redis 缓存 6月日更

理解IM消息“可靠性”和“一致性”问题,以及解决方案探讨

JackJiang

即时通讯 IM 可靠消息最终一致

工厂里三个质检车间缩减为一个,飞桨企业版EasyDL助力降本增效

百度大脑

飞桨

Python——注释和字符串的拼接

在即

6月日更

区块链能否为应对气候变化 提供解决方案?

CECBC

区块链+数字政务:成都高新区如何创新

CECBC

网络攻防学习笔记 Day38

穿过生命散发芬芳

网络攻防 6月日更

5分钟速读之Rust权威指南(十八)

wzx

rust 范型 trait

Bzz节点挖矿系统搭建,Bzz分币系统源码

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