写点什么

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

评论

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

《Operating System Concepts》阅读笔记:p50-p61

codists

操作系统

DeepSeek满血版在IDEA中快的飞起

阿里巴巴云原生

阿里云 云原生 AI程序员 AI程序员体验官

DeepSeek满血版在IDEA中快的飞起

阿里云云效

阿里云 云原生 AI程序员 AI程序员体验官

易观AI战力飙升营,助你突破重围,毕业即就业 !

易观分析

企业网络方案选择指南: 混合WAN与SD-WAN的差异

Ogcloud

SD-WAN 企业组网 企业网络 企业网络方案 混合wan

微软 Muse 游戏生成模型:理解游戏环境,生成玩家动作;西工大 ASLP 实验室开源语音理解模型 OSUM丨日报

声网

京东广告基于Apache Doris的冷热数据分层实践

京东零售技术

鸿蒙原生应用开发也可以使用DeepSeek了

HarmonyOS开发者

京东联合松灵等多家企业高校推出业内首个具身智能原子技能库架构

松灵机器人

人、钱、业务,涌向“机器人”

趣解商业

科技 人形机器人 宇树科技

DeepSeek如何制作思维导图?3个常用绘图工具盘点!

职场工具箱

人工智能 思维导图 AIGC 效率软件 DeepSeek

为什么推荐你也来 Let's Vision 2025?

声网

大模型开发利器Aladdin加持,4小时亲手复刻DeepSeek Aha Moment

九章云极DataCanvas

云手机构建流量矩阵案例:快手多开运营

Ogcloud

矩阵运营 矩阵引流 短视频矩阵 快手矩阵

15小时数据搞定衣物折叠收纳:DexVLA助力机器人轻松解决复杂任务!

松灵机器人

26款可视化看板管理系统深入对比(2025年最新)

易成研发中心

看板工具

低代码平台国产化部署的架构演进与实践路径——信创生态下的高效开发体系构建

不在线第一只蜗牛

低代码

【连载 17】多线程执行类

FunTester

松灵LIMO赋能科创教育,华动师大滴水湖冬令营培育AI新势力

松灵机器人

IDEA + 通义灵码AI程序员:快速构建DDD后端工程模板

阿里巴巴云原生

阿里云 云原生 通义灵码 AI程序员 AI程序员体验官

IDEA + 通义灵码AI程序员:快速构建DDD后端工程模板

阿里云云效

百度搜索,能否将DeepSeek变成“内功”?

脑极体

AI

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