写点什么

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

评论

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

注册苹果开发者账号步骤揭秘,创建证书全攻略

雪奈椰子

因为内存溢出,我差点被优化

高端章鱼哥

OOM 内存溢出

虹口有数丨上海市虹口区“一网统管”新解法

云计算

一图回顾华为云开发者联盟扫地僧见面会

华为云开发者联盟

开发者 华为云 华为云开发者联盟 企业号9月PK榜

Waves 14 Complete for Mac(后期混音效果全套插件)v2023.08.09激活版

mac

苹果mac Windows软件 Waves 14 Complete 后期混音效果全套插件

有一个新工具,能让程序员变成高手,优雅撸它!

树上有只程序猿

低代码 应用开发 JNPF

入门指南:GPU云服务器用途一览

青椒云云电脑

云服务器

学生PC怎么选?云电脑 不买高价硬件也能畅享高配

青椒云云电脑

云电脑

赋能游戏产业的新引擎

百度开发者中心

#人工智能 生成式AI 千帆大模型平台

网络隔离下实现的文件传输,现有的方式真的安全吗?

镭速

文件传输 内外网数据交换 网络隔离

软件开发中,如何为你的代码构建三层防护体系

华为云开发者联盟

软件开发 华为云 华为云开发者联盟 企业号9月PK榜

云GPU如何加速AI训练

青椒云云电脑

云服务器

观测云产品更新 | 优化日志数据转发、索引绑定、基础设施自定义等

观测云

可观测性用观测云

警惕U盘、FTP等传统文件摆渡方式的7大弊端

镭速

文件传输 大数据传输 文件摆渡

直播拍卖软件开发公司,定制开发现成源码

软件开发-梦幻运营部

数据库OpenTenBase和操作系统OpenCloudOS获信通院Oscar开源尖峰奖

Geek_2d6073

智能时代的“发动机升级”:数据中心十年之变

脑极体

数据中心

技术分享| anyRTC音视频混流技术解析

anyRTC开发者

音视频 视频会议 音视频混流 图像合成 音频合成

游戏研发与产业的变革之路

百度开发者中心

#人工智能 生成式AI LLM

私有云架构设计原理

青椒云云电脑

云厂商

私有云有哪些特点,与公有云有什么关系

青椒云云电脑

私有云

文心一言 VS 讯飞星火 VS chatgpt (98)-- 算法导论9.3 4题

福大大架构师每日一题

福大大架构师每日一题

DaaS到底是什么 为什么越来越多人在用云桌面办公

青椒云云电脑

云桌面

传统私有云系统存在哪些问题

青椒云云电脑

私有云 云厂商

中国私有云未来演进方向

青椒云云电脑

私有云

用友BIP开发者生态亮相华为全联接大会

YonBuilder低代码开发平台

度小满发布“轩辕70B”金融大模型 C-Eval、CMMLU双榜排名第一

科技热闻

首购2元起!CDN与加速特惠专场来啦~

火山引擎边缘云

CDN CDN加速 边缘云 CDN技术

INFINI Labs 产品更新 | Gateway 支持基于 Kafka 的复制能力,发布 Helm Charts 部署方式

极限实验室

Helm Charts infini gateway INFINI Console easysearch

如何提升Java项目质量,代码是关键

SoFlu软件机器人

代码质量 Java 开发

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