写点什么

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

评论

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

LeetCode题解:279. 完全平方数,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

力扣(LeetCode)刷题,简单题+中等题(第20期)

不脱发的程序猿

LeetCode 力扣 28天写作 算法面经 3月日更

GitHub开源的超逼真俄罗斯方块游戏

不脱发的程序猿

GitHub 开源 28天写作 俄罗斯方块游戏 3月日更

程序员成长第二十二篇:做任务分配时,要考虑员工的成长。

石云升

项目管理 程序员 28天写作 职场经验 3月日更

拖延症这个毛病「Day 16」

道伟

28天写作

二维码高端路线养成计

happlyfox

学习 技能 28天写作 3月日更

(28DW-S8-Day16) 在线教育体验课

mtfelix

28天写作

Python 环境搭建

依旧廖凯

Python 28天写作 3月日更

与前端训练营的日子 -- Week18

SamGo

学习

IDEA 常用插件与配置

TroyLiu

Java vim ide idea插件 IntelliJ IDEA

快速排序算法实现及优化

Silently9527

Java 排序算法 快速排序

SICP 习题解答 1.10

十元

阶段性正确

广之巅

阶段性正确

世界上最好的排序算法是什么?

Nick

数据结构 算法 快速排序

架构师训练营 4 期 第10周

引花眠

架构师训练营 4 期

两会热议区块链,未来将呈现四大趋势

CECBC

区块链

Python 语言基础之 变量和常量

HoneyMoose

容器 & 服务:K8s 与 Docker 应用集群 (三)

程序员架构进阶

Docker 容器 kubernet 28天写作 3月日更

IntellIJ IDEA 命令行运行一个 HelloWorld Python 程序

HoneyMoose

LinqToExcel.Extend 源码分析

happlyfox

28天写作 3月日更

程序员是如何解决问题的

ES_her0

28天写作 3月日更

云边协同

lenka

云计算 产品经理 3月日更

「架构师训练营 4 期」 第九周 - 001&2

凯迪

架构师训练营 4 期

Dubbo SPI 使用源码分析

Yangjing

dubbo spi ProxyFactory 服务暴露 ExtensionFactory

恋物志(三):“美丽到牙齿”的智能硬件圈地运动

脑极体

python常用库简介

张鹤羽

28天写作 3月日更

学习曾国藩:职场咸鱼的翻身之法

boshi

七日更 职业生涯

【笔记】第六周 - 第 2 课

Geek_娴子

自动化测试环境搭建

IT蜗壳-Tango

IT蜗壳自动化 21天

5分钟介绍AI人工智能,机器学习和深度学习,John 易筋 ARTS 打卡 Week 40

John(易筋)

ARTS 打卡计划 arts

数据分析师

Nydia

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