写点什么

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

评论

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

Wi-Fi 6 vs. Wi-Fi 6E: The differences between IPQ6018, IPQ6010 and IPQ5018

wallysSK

Chappyz 生态迎重磅利好:多链应用程序启动、100% 收入共享计划开启

股市老人

大数据时代:我对大数据的发展趋势与前景展望

屿小夏

大数据

#issue 111538 MySQL 8.0 instant add/drop column 性能回退问题

ba0tiao

MySQL InnoDB

软件开发

Geek_8da502

[译]优秀的URL设计

南城FE

前端 后端 url

唯品会商品列表数据接口(Vip.item_search)丨唯品会API接口

tbapi

唯品会商品列表数据接口 关键词搜索唯品会接口 唯品会API接口 唯品会商品数据接口 唯品会商品API接口

vivo 容器平台资源运营实践

vivo互联网技术

容器平台 资源运营 利用率提升

杭州悦数成立「悦数图技术陆家嘴数据智能研究院」,入驻上海陆家嘴金融城「双城辉映」平台

最新动态

web3钱包进阶!从入门到精通,Bitget实现逆袭

股市老人

如何写好Prompt,让GPT 的回答更加精准

Bob Lin

人工智能 openai ChatGPT GPT-4 langchain

诚邀报名|来开源项目维护者论坛,为项目可持续发展贡献您的声音

开放原子开源基金会

开源

宏 | AI工程化部署

AIWeker

c AI AI工程化部署

华为终于开奖了,结果有点可笑

Jackpop

支付宝 v3 自签名如何实现

盐焗代码虾

Java 支付宝 签名 加签

C 语言运算符详解

小万哥

c c++ 程序员 后端 软件开发

诚邀报名|探寻AI融合的前端开发之道:解除焦虑,构建核心竞争力

开放原子开源基金会

开源

5G和云渲染将如何快速推进XR和元宇宙?

3DCAT实时渲染

云渲染 元宇宙解决方案

脉脉宣布全员下调,华为莫名奇妙躺枪。。。

Jackpop

centos 7.6安装sealos和单机集群

麦兜

开源时代:极狐GitLab如何保证软件供应链安全

极狐GitLab

一起学Elasticsearch系列-深度分页问题

Java随想录

Java 大数据 elastic

一款双极锁存型霍尔位置传感器

芯动大师

诚邀报名|与你同行——开源教育晨雾中的早行者

开放原子开源基金会

开源

TDengine 创始人陶建辉出席 CIAS 2023 年会,为新能源汽车数据处理带来新思路

TDengine

tdengine 时序数据库

使用 Taro 开发鸿蒙原生应用 —— 探秘适配鸿蒙 ArkTS 的工作原理 | 京东云技术团队

京东科技开发者

倒计时3天|开源开发者的技术年末盛典即将开启

开放原子开源基金会

开源

【Web安全】DVWA漏洞靶场搭建流程(win系统下)

Geek_Angel

网络安全 WEB安全 DVWA 实验靶场

顶级加密混淆混淆工具测评:ipagurd

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