写点什么

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

评论

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

Proxmox Mail Gateway 8.2 - 全面的开源邮件安全平台

sysin

Proxmox

使用Amazon Q和MCP优化深度学习环境

qife122

深度学习 MCP

Jarvis Agent 核心概念与系统架构

SkyFire

agent LLM Jarvis

Metasploit Pro 4.22.8-2025063001 (Linux, Windows) - 专业渗透测试框架

sysin

Metasploit

群聊记录太多怎么办? 用 TRAE + Chatlog MCP 实现微信群聊记录总结

火山引擎开发者社区

MCP Trae

聚力创新 智启未来:第四届中国PMO&PM大会,引领项目管理新航向

新消费日报

我的代码出现幻觉?说好的a = 1; x = b,怎么成了x = b; a = 1?

poemyang

并发编程 多线程 有序性 Java并发编程

Microsoft SQL Server 2022 RTM GDR & CU20 (2025 年 7 月更新)

sysin

SQL Server

Jarvis Agent快速开始

SkyFire

agent LLM

Proxmox VE 9.0 Beta - 开源虚拟化管理平台

sysin

proxmoxve

JetBrains TRAE 插件上线 cue 能力,立即体验

火山引擎开发者社区

Trae

Microsoft Exchange Server 2016 Cumulative Update 23

sysin

Microsoft Exchange

SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具

sysin

SSMS

Jarvis Agent功能扩展

SkyFire

agent LLM Jarvis

灵宝CASBOT亮相WAIC 2025,双新品发布诠释“人机共生”愿景

极客天地

Proxmox Backup Server 4.0 Beta - 开源企业级备份解决方案

sysin

Proxmox

开源能源管理系统:数字化时代能源安全与效能提升的核心引擎

开源能源管理系统

开源 能源管理系统

Jarvis Agent高级主题

SkyFire

agent LLM Jarvis

TRAE + Milvus MCP,现在用自然语言就能搞定向量数据库部署了!

火山引擎开发者社区

字节跳动 Trae

建筑矿山设备工厂南京厂区能源管理升级:MyEMS 开源系统的实践与成效

开源能源管理系统

开源 智慧矿山 能源管理系统

年损耗超2300万!制造业工具管理困局背后的RFID破局之道

斯科信息

RFID解决方案 斯科信息 RFID技术

Microsoft Exchange Server 2019 Cumulative Update 15

sysin

Microsoft Exchange

AI如何重塑芯片设计未来

qife122

半导体 芯片设计

火山引擎DataAgent:AI完成从“数据洞察”到“自主行动”质变

火山引擎开发者社区

AI 火山引擎

Playwright | 测试框架集成​指南:参数化测试 + 多浏览器并行执行

测试人

软件测试

Jarvis Agent 使用指南

SkyFire

agent LLM Jarvis

微店商品列表API响应数据解析

tbapi

微店API 微店商品数据采集 微店商品列表接口

保险科技行业需要用到堡垒机吗?哪些情况需要?

行云管家

网络安全 数据安全 堡垒机

六个观点剖析FXTM富拓是不是一个合格卓越的经纪商

极客天地

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