NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论

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

ARTS 打卡第1周(8.14~8.20)

向东是大海

ARTS 打卡计划 arts

坚持梦想,心向光明

何元

ARTS 打卡计划 个人感悟

基于 Easysearch kNN 搭建即时图片搜索服务

极限实验室

KNN 向量检索 图像搜索 easysearch

Illustrator 2023最新资源v27.8.1+补丁激活教程

mac大玩家j

AI Mac软件 矢量设计 矢量设计工具

“龙蜥社区系统运维MeetUp”乘云数字议题分享

乘云 DataBuff

smardaten实战丨谁说无代码不能开发出漂亮的门户首页?

热爱编程的小白白

MATLAB R2023a 激活for Mac附安装教程

胖墩儿不胖y

Mac软件 数据分析软件 好用的数据管理

BSN“五、十、百”工程实施半年成果丰硕,助力数字化转型和高质量发展

BSN研习社

微信小程序:跨端开发框架的繁荣发展之路

没有用户名丶

PoseiSwap 更新质押系统,并将在 8 月18 日开启“Trident ”快照

大瞿科技

火山引擎DataLeap:助力PICO落地数据流程规范,提升开发效率

字节跳动数据平台

数据中台 数据治理 数据安全 数据研发 企业号 8 月 PK 榜

中国大学生服务外包创新创业大赛丨借 AI 之力,助“记账”难题

热爱编程的小白白

VuePress 数学公式支持

ReturnTmp

2023上海国际智慧物业展览会|城博会

AIOTE智博会

城博会 智慧物业博览会

分析商务报表使用什么工具?

对不起该用户已成仙‖

ARTS 打卡第 8 天

自由

ARTS 打卡计划

Eudic欧路词典 for Mac(英语学习工具) v4.4.5增强激活版

mac

苹果mac Windows软件 欧路词典 Eudic mac 英语学习工具

鸿蒙生态星河璀璨| 先行者李洋全力以赴,拥抱星辰大海

最新动态

VisualStudio打包项目文件为.exe安装包

智趣匠

【华秋推荐】无线充电的原理与解决方案

华秋电子

无线充电

R 语言入门与介绍

timerring

R 语言

通宵加班设计的储能板不能用?厚铜PCB设计这个问题一定要注意

华秋电子

储能

MySQL切换字符集引发的思考(一)

石小天

MySQL 数据库 运维

华为云828营销季即将来袭,快来解锁明星产品优惠福利!

平平无奇爱好科技

四项代表厂商,Kyligence 入选 Gartner 数据及人工智能相关领域多项报告

Kyligence

数据分析 指标建设

澳鹏高精度AI辅助数据标注平台推出全新SaaS版本

澳鹏Appen

人工智能 SaaS 数据标注

Kyligence x 百胜数睿|电商全渠道运营增长新利器

Kyligence

数智化 指标平台

Presto 设计与实现(三):依赖注入框架 Guice

冰心的小屋

guice presto 依赖注入 presto 设计与实现

银行科技外包存风险,金融机构如何做好软件供应链安全管理?

网安云

软件安全 供应商管理 软件供应链安全 金融业

OLED屏幕,LED,AMOLED哪个更好?

Dylan

LED 显示器 LED显示屏

倒计时 1 天!CommunityOverCode Asia 2023 参会攻略出炉,共享开源盛宴

Apache IoTDB

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