50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

评论

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

YashanDB数据库索引设计与性能优化

数据库砖家

YashanDB数据库索引碎片整理与维护技术

数据库砖家

Java诞生30周年:持续演进的技术生态与AI新方向

qife122

Java AI开发

2025 中小企业 RPA 落地省钱省力全攻略

Techinsight

CVE-2019-13382:SnagIt本地权限提升漏洞分析与利用

qife122

漏洞挖掘 符号链接

YashanDB数据库索引设计技巧及实践指南

数据库砖家

YashanDB数据库提升数据访问速度的关键技术

数据库砖家

基于YOLO的钢筋目标检测系统 | 钢筋计数识别与检测【完整源码+部署】

申公豹

人工智能

主网上线后生态极速扩张的 Berachain 生态,有哪些值得关注的项目?

股市老人

无IT能玩转自动化吗?中小企业RPA落地省钱省力全攻略

Techinsight

校园网IP地址要如何管理

郑州埃文科技

配电 低压电工经验总结(14)

万里无云万里天

工业 工厂运维

华为云云原生团队 2026 届校招正式启动

华为云原生团队

云计算 容器 云原生

YashanDB数据库索引设计与维护最佳实践

数据库砖家

YashanDB数据库索引设计最佳实践指南

数据库砖家

在AI技术快速实现创意的时代,挖掘新需求成为关键突破——某知名电子书转有声书工具需求洞察

qife122

开源项目 AI语音合成

加州隐私保护局通过CCPA新规并开放DROP规则公众评议

qife122

CCPA 网络安全法规

还在为月初月末崩溃?新一代财务自动化软件盘点

Techinsight

YashanDB数据库提供的用户体验优化方向

数据库砖家

YashanDB数据库通过机器学习提升数据管理效率

数据库砖家

RPA规模化崩盘?90%企业踩过的5大选型坑!

Techinsight

Go/C++ 指针比较

俞凡

c++ golang

YashanDB数据库索引优化技术详解

数据库砖家

工业管理 项目管理经验总结(6)

万里无云万里天

项目管理 工业 工厂运维

从试点到千级流程:RPA 选型必看的 5 大架构与信创避坑点!

Techinsight

MIAOYUN | 每周AI新鲜事儿(08.22-08.29)

MIAOYUN

人工智能 AI 资讯 大模型 AI 图像生成

埃文科技荣获第十四届中国创新创业大赛河南赛区成长组一等奖

郑州埃文科技

YashanDB数据库索引设计实战,提高查询响应速度

数据库砖家

YashanDB数据库索引优化策略及效果评估

数据库砖家

让集成更安心,让连接更高效:鸿蒙生态伙伴SDK优选库双端赋能

HarmonyOS SDK

HarmonyOS NEXT HarmonyOS SDK应用服务

大数据-84 Spark RDD创建全攻略:从集合、文件到转换操作详解

武子康

Java 大数据 flink spark 分布式

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