写点什么

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

评论

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

预算超支的对策:掌握软件项目成本管理

爱吃小舅的鱼

程序员 预算管理 成本控制

图片批量处理软件XnConvert for Mac(图像格式转换软件)

Mac相关知识分享

Steinberg Cubase Pro 14 for Mac(多功能音乐制作软件)

Mac相关知识分享

Screaming Frog SEO Spider:网站爬虫及SEO审计工具

Rose

DaVinci Resolve v19.0.3激活版 达芬奇mac版安装教程

Rose

A Better Finder Attributes 7 for Mac文件批量重命名工具

Mac相关知识分享

适合局域网的项目管控工具有哪些?9款对比

爱吃小舅的鱼

项目管控软件

Spring事务实现原理

京东科技开发者

项目管理工具评测:如何选择最适合的工具

爱吃小舅的鱼

项目管理工具

EndNote 21授权密钥2024最新 附EndNote 21详细图文安装教程

Rose

亚马逊商品API接口:运用及收益的深度探讨

科普小能手

API 接口 API 测试 亚马逊API 亚马逊商品详情API 亚马逊API接口

软件开发中的技术债务:应对挑战的技巧

爱吃小舅的鱼

程序员

编程爱好者的福音:实用技巧与教程

天津汇柏科技有限公司

代码 #编程

深入了解堡垒机的四个作用-行云软件

行云管家

网络安全 数据安全 堡垒机 企业安全

CST软件如何添加和管理自定义的材料

思茂信息

教程 仿真软件 CST软件

Agisoft Metashape中文版 三维建模重建软件

Rose

与 Perses 深度集成,重构 GreptimeCloud 可视化工作台

Greptime 格睿科技

可视化 时序数据库 perses

PhoneRescue for iOS for Mac苹果设备数据恢复软件

Mac相关知识分享

KWDB 亮相 COSCon′24 第九届中国开源年会

KaiwuDB

数据库 开源 kaiwudb开源

行云堡垒V7.5新特性

行云管家

网络安全 堡垒机

开源分析和落地方案—Sentinel篇

京东科技开发者

变更管理的关键策略:确保软件项目成功

爱吃小舅的鱼

变更管理

Studio One 6 for mac注册机 Studio One 6激活安装包 支持M1/M2

Rose

【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR

阿里云大数据AI技术

人工智能 nlp 论文 PAI EMNLP

Dual-Band WiFi Excellence with Wallystech’s QCN9274, QCN6274, QCN9224, QCN6224, and MT7915 Network Cards

wallyslilly

qcn9274

测试人生 | 90后斩获多家名企offer的小哥哥,做对了什么?

测试人

软件测试

如何选择文档版本管理系统?推荐8款常用工具

爱吃小舅的鱼

程序员 文档管理 文档管理软件

SQL Server 数据太多如何优化

威哥爱编程

数据库 sql SqlServer

探索设计稿自动生成Flutter代码的技术方案

京东科技开发者

焕然一新!TinyVue 组件库 UI 大升级,更符合现代的审美!

OpenTiny社区

Vue 前端 组件库 OpenTiny TinyVue

Media Encoder 2025 for Mac(me2025中文版)

Mac相关知识分享

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