速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

评论

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

被阿里奉为神册!2021公认最权威的分布式微服务指导手册

Java 架构 面试 程序人生 编程语言

架构实战营 设计千万级学生管理系统的考试试卷存储方案

💤 ZZzz💤

架构实战营

设计千万级学生管理系统的考试试卷存储方案

Yina🌝很浪🌊

千万级学生管理系统的考试试卷存储方案

Sky

架构训练营

阿里大牛再写传奇:并发原理JDK源码手册GitHub下载量已破百万

Java 编程 架构 面试 程序人生

网络攻防学习笔记 Day148

穿过生命散发芬芳

等级保护 9月日更

连锁便利店:夕阳产业还是明日之星

石头IT视角

26. 自动驾驶的六个级别

Databri_AI

人工智能

极客时间架构实战营作业四

jjn0703

架构实战营

阿里资深架构师整理分享全套Java核心技术面试题及答案

Java 编程 架构 面试 程序人生

时间转换不在变bug

卢卡多多

时间戳 时间转换 9月日更

架构实战营-模块四作业

南山先生

「架构实战营」

模块4作业

4anonymous

模块四作业-考试试卷存储设计

potti

架构实战营

2021西部云安全峰会召开:“云安全优才计划”发布,腾讯云安全攻防矩阵亮相

腾讯安全云鼎实验室

云安全 峰会

J2PaaS低代码开源版,10月1号即将上线,企业数字化转型优选!

J2PaaS低代码平台

低代码 零代码 开发工具

WebRTC是如何设置视频编码偏好的?

liuzhen007

音视频 引航计划 领航计划

喜讯 | 拍乐云创始人赵加雨荣获「2021企业数智化转型升级先锋人物」奖

拍乐云Pano

音视频 数智化

阿里藏经阁天花板:高性能Java架构核心原理手册,一定要偷偷看

Java 编程 架构 面试 程序人生

模塊九 畢業設計

孫影

架构实战营 #架构实战营

千万级学生管理系统的考试试卷存储方案

毛先生

Prometheus 2.28.0 新特性

耳东@Erdong

Prometheus 9月日更 relaese

如何设计高可用高性能架构

眼镜盒子

架构实战营

java 虚拟机 GC 学习笔记三

风翱

GC 9月日更

深耕与构建:华为数字能源的立体版图

脑极体

阿里IM技术分享(四):闲鱼亿级IM消息系统的可靠投递优化实践

JackJiang

架构设计 即时通讯 IM

linux之软连接和硬连接的区别

入门小站

Linux

陌陌和它的解药,聊聊出海社交产品的思路

拍乐云Pano

社交APP出海 社交APP 泛娱乐出海

消息队列:Kafka Consumer源码解读

正向成长

kafka

2021年金九银十必问的1000道Java面试题及答案整理

Java 架构 面试 程序人生 编程语言

Base64编码对照表

入门小站

工具

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