写点什么

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

评论

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

优化模型之”标注错误“

矩视智能

深度学习 机器视觉

MySQL的自增id会用完吗?用完怎么办

互联网工科生

MySQL MySQL自增ID

NFTScan 支持非 EVM 公链的 NFT Collection 的认证功能

NFT Research

NFT NFT\ NFTScan

开源贡献难吗?

字节跳动云原生计算

flink 开源 字节

「爱嗨游」发布会剧透|应用出海十大难题,全景方案一次解决

融云 RongCloud

产品 社交 泛娱乐 GenAI 爱嗨游

iPhone 15 拆机调查来了;小米澎湃 OS 彻底重写底层架构丨 RTE 开发者日报 Vol.69

声网

七个开发者不可不知的VS Code小技巧

树上有只程序猿

vscode

大模型训练的轻量化视觉预训练模型

百度开发者中心

人工智能 大模型训练

全球领先的即时通讯厂家,为企业提供卓越沟通解决方案

BeeWorks

低代码如何赋能实体经济走向数实融合

力软低代码开发平台

HarmonyOS语言基础类库开发指南上线啦!

HarmonyOS开发者

HarmonyOS

内部即时通讯软件,为企业协同办公保驾护航

BeeWorks

2023年知名国产数据库厂家汇总

行云管家

数据库 国产化 数据运维 数据安全运维 信创国产化

数据库安全运维是什么意思?数据库安全运维系统用哪家好?

行云管家

数据库 数据安全 数据库安全 数据安全运维

华新丽华∣国产化价值替代的先行者

用友BIP

用友 Fast by BIP

重构AI智慧未来,小度全屋智能生态再进化

新消费日报

私有化部署助力企业信息安全,WorkPlus助您完美替代企微、钉钉、飞书!

BeeWorks

Mac移植版 Nebula街机模拟器最新汉化包

胖墩儿不胖y

mac游戏 游戏推荐

技术同学如何设计职业规划

老张

职业规划 职场成长 职场发展

选择美国高防服务器,保障您的业务不受网络攻击

一只扑棱蛾子

美国高防服务器 高防服务器

深度学习CV任务的突破与优化

百度开发者中心

人工智能 深度学习 大模型训练

九月 Web3 游戏报告: 数量增长,巨头入场,用户获取和留存仍存挑战

Footprint Analytics

区块链游戏 NFT Web3 游戏 Web3 Games

报名倒计时 | 超硬核!第四届中国云计算基础架构开发者大会邀你参会

OpenAnolis小助手

云原生 深圳 龙蜥社区 机密计算 CID

大模型训练:Transformer模型、架构与训练方法

百度开发者中心

人工智能 大模型训练

双翻页大屏看书,Mate X5上的华为阅读让你“阅”如纸上

最新动态

OpenHarmony应用全局的UI状态存储:AppStorage

OpenHarmony开发者

OpenHarmony

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