Swift 4.1带来条件一致性等语言上的提升
\
看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!
\
\\
Xcode 9.3中的Swift 4.1带来了一些语言上的提升,包括Equatable
和Hashable
协议的自动实现和条件一致性等。
\\
条件一致性
\\
条件一致性即,泛型类型只有在其类型参数满足特定要求的时候才会遵循某个协议。例如,一个Array
只有当它的元素也遵循Equatable
协议的时候,才能实现Equatable协议。这可以用下列声明表示。
\\
\extension Array: Equatable where Element: Equatable {\ static func ==(lhs: Array, rhs: Array) -\u0026gt; Bool { ... }\}\
\\
这弥补了Swift泛型上的缺陷,使得泛型适配器类型(例如,反映组合类型能力的泛型类型)完全成为可能。例如,在Swift 3中存在4种不同的处理“懒”项目的泛型类型:LazySequence
、LazyCollection
、LazyBidirectionalCollection
和LazyRandomAccessCollection
。其中每一种类型都重新实现或者继承了和组合类型相同的API。使用条件一致性,某一种类型的Sequence可以声明遵循懒协议,而无需定义任何中间泛型类型。
\\
Synthesized ==
and hashValue
\\
Swift 4.1编译器能够为那些声明遵循Equatable
和Hahable
协议的structs和enums,生成==
和hashValue
方法的实现。以前,开发者必须自己实现那些方法,而那是一件非常繁琐的任务:在通常情况下,==
方法的实现必须比较structs或unions的每一个相应成员;而hashValue
方法必须设法保证返回一个唯一的字符串。在Swift 4.1,开发者只需声明遵循那些协议,相关的方法就会自动生成,提供所有存储的分别符合Equatable
或Hashable
的属性或枚举值。
\\
Swift 4.1中的其它显著改变如下:
\\
- 大多数集合库的索引类型现在符合
Hashable
,可以在key-path下标和哈希过的集合中使用:\\
\let s = \"Hashable\"\let p = \\String.[s.startIndex]\s[keyPath: p] // \"H\"\
\\ 完全实现智能KeyPaths。KeyPath现在支持下标、可选的链接和可选的强制换行。 \\ weak
和unowned
关键词不能再用于协议中的属性声明。 \\ 与classes已存在的限制相似,Swift structs不再允许在一个不同的模块中定义一个初始化器来直接初始化struct的字段。在访问struct字段前,struct必须已经调用self.init
进行了初始化。\\\
想要全面了解所有变更,你可以访问官方的变更日志。
\\
查看英文原文:Swift 4.1 Brings Conditional Conformance and More
\\
感谢罗远航对本文的审校。
\
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们。
Swift 4.1带来条件一致性等语言上的提升相关推荐
- Swift是花拳绣腿吗?——谈谈开发语言与程序员的职业发展
为什么80%的码农都做不了架构师?>>> 作者简介: 任旻,北京工业大学硕士, 2005年加入微软中国有限公司,2009年加入腾讯,现任高级工程师,曾负责开发"QQ概 ...
- 那些编程语言中的“后浪”都怎么样了:Swift 成功把“前浪”拍在沙滩上
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者 | oschina 来源 | 开源中国 近日, ...
- 二级c语言基础题库100题,二级C语言上题库100题.doc
二级C语言上题库100题 二级C语言上机试题汇编 第01套: 给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去 除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针 ...
- 微信团队分享:微信支付代码重构带来的移动端软件架构上的思考
本文原文由微信客户端高级工程师方秋枋原创发表于WeMobileDev公众号,收录时有修订和加工,感谢作者的无私分享. 1.引言 作为一个重要业务,微信支付在客户端上面临着各种问题. 其中最核心问题就是 ...
- R语言使用yardstick包的lift_curve函数评估多分类(Multiclass)模型的性能、并使用autoplot函数可视化模型在每个交叉验证(或者重采样)的每一折fold在每个分类上的提升
R语言使用yardstick包的lift_curve函数评估多分类(Multiclass)模型的性能.并使用autoplot函数可视化模型在每个交叉验证(或者重采样)的每一折fold在每个分类上的提升 ...
- 让大家信任自己,做个行为和语言上都没黑盒子的技术人员(转)
在汽车之家工作了 10 年,如今创业也有 6 个月了,身边流经了上百人的技术朋友,和他们一起战斗.一起创业.看着他们离职.看着他们不开心. 原因是啥? 最原始状态就是:不被信任. 写代码的技术是个很独 ...
- 易语言上 微信跳一跳 自动跳 思路分析
现在跳一跳已经没有以前这么火了 而且乱七八糟的检测机制也让很多玩家流失. 加上现在的辅助层出不穷 就连玩个跳一跳都要开挂 太过分了. 现在我们就简单分析这个在易语言上怎么 写一个 跳一跳 自动跳的小程 ...
- 利用Go语言上传图像并生成缩略图
承前文:Go语言中对图像进行缩放 //利用Go语言上传图像并生成缩略图 func upload(w http.ResponseWriter, req *http.Request, link strin ...
- C语言二级背诵小抄,计算机二级C语言上题库(可缩印做小抄)百分百准确.doc
计算机二级C语言上题库(可缩印做小抄)百分百准确 第一套 程序填空 程序通过定义学生结构体数组,存储了若干个学生的学号.姓名和三门课的成绩.函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典 ...
最新文章
- 干掉 Postman?测试接口直接生成API文档,这工具真香!
- 面试官:能说一说Mysql缓存池吗?
- 百度的TSDB——可针对tag查询,应该类似kairosDB
- 设计模式系列 - 原型模式
- 2019年Java编程开发值得学习的10大技术
- memtrack: Couldn‘t load memtrack module (No such file or directory) 的问题解决
- Spring Boot 项目优化和Jvm调优 (楼主亲测,真实有效)
- 地理探测器 GD包下载及应用(R语言,基于Rstudio)
- 仿照LFW的pair.txt生成自己数据集的txt文件
- 计算机管理的服务打不开,Windows 系统服务无法打开解决方法+操作命令详解
- excel去掉公式()
- 关于JavaScript中 “Uncaught TypeError: date.getDay is not a function“的问题
- 树莓派上搭建rtsp流媒体服务器
- MATLAB函数合辑
- 二叉树的深度怎么算(Java代码实现)
- BUUCTF笔记之Real部分WP(一)
- c语言3 17,C语言修仙
- 【Unity3D—C#】按下任意按键,返回按键的名称 以及 KeyCode键码详解
- 计算机专业河南单招,河南单招计算机专业专科学校排名
- 关于开展上海市2022年度高新技术企业认定管理相关工作的通知
热门文章
- c语言延时系统,基于VB的单片机C语言延时程序各参数计算系统
- go字符串转byte_go语言学习-基本数据类型
- Python中GIL(全局解释器锁)
- java web 常用工具类_Javaweb常用工具类及配置文件备份
- gcn在图像上的应用_GCN的概念与应用
- 汇编语言中xor指令_汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作...
- mysql mpm_使用Zabbix + MPM全面监控MySQL
- 查询oracle数据库的表格数据类型,excel表格中如何查询数据库数据类型-我想把excel表格中的数据导入oracle数据库中,想在......
- Spring Boot基础学习笔记07:Spring Boot整合JPA
- 列表视图案例2——显示用户列表