\

看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!

\

\\

Xcode 9.3中的Swift 4.1带来了一些语言上的提升,包括EquatableHashable协议的自动实现和条件一致性等。

\\

条件一致性

\\

条件一致性即,泛型类型只有在其类型参数满足特定要求的时候才会遵循某个协议。例如,一个Array只有当它的元素也遵循Equatable协议的时候,才能实现Equatable协议。这可以用下列声明表示。

\\

\extension Array: Equatable where Element: Equatable {\  static func ==(lhs: Array, rhs: Array) -\u0026gt; Bool { ... }\}\

\\

这弥补了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中的其它显著改变如下:

\\

  • 大多数集合库的索引类型现在符合Hashable,可以在key-path下标和哈希过的集合中使用:\\
\let s = \"Hashable\"\let p = \\String.[s.startIndex]\s[keyPath: p] // \"H\"\

\\ 完全实现智能KeyPaths。KeyPath现在支持下标、可选的链接和可选的强制换行。 \\ weakunowned关键词不能再用于协议中的属性声明。 \\ 与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带来条件一致性等语言上的提升相关推荐

  1. Swift是花拳绣腿吗?——谈谈开发语言与程序员的职业发展

    为什么80%的码农都做不了架构师?>>>    作者简介: 任旻,北京工业大学硕士, 2005年加入微软中国有限公司,2009年加入腾讯,现任高级工程师,曾负责开发"QQ概 ...

  2. 那些编程语言中的“后浪”都怎么样了:Swift 成功把“前浪”拍在沙滩上

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者 | oschina 来源 | 开源中国 近日, ...

  3. 二级c语言基础题库100题,二级C语言上题库100题.doc

    二级C语言上题库100题 二级C语言上机试题汇编 第01套: 给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去 除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针 ...

  4. 微信团队分享:微信支付代码重构带来的移动端软件架构上的思考

    本文原文由微信客户端高级工程师方秋枋原创发表于WeMobileDev公众号,收录时有修订和加工,感谢作者的无私分享. 1.引言 作为一个重要业务,微信支付在客户端上面临着各种问题. 其中最核心问题就是 ...

  5. R语言使用yardstick包的lift_curve函数评估多分类(Multiclass)模型的性能、并使用autoplot函数可视化模型在每个交叉验证(或者重采样)的每一折fold在每个分类上的提升

    R语言使用yardstick包的lift_curve函数评估多分类(Multiclass)模型的性能.并使用autoplot函数可视化模型在每个交叉验证(或者重采样)的每一折fold在每个分类上的提升 ...

  6. 让大家信任自己,做个行为和语言上都没黑盒子的技术人员(转)

    在汽车之家工作了 10 年,如今创业也有 6 个月了,身边流经了上百人的技术朋友,和他们一起战斗.一起创业.看着他们离职.看着他们不开心. 原因是啥? 最原始状态就是:不被信任. 写代码的技术是个很独 ...

  7. 易语言上 微信跳一跳 自动跳 思路分析

    现在跳一跳已经没有以前这么火了 而且乱七八糟的检测机制也让很多玩家流失. 加上现在的辅助层出不穷 就连玩个跳一跳都要开挂 太过分了. 现在我们就简单分析这个在易语言上怎么 写一个 跳一跳 自动跳的小程 ...

  8. 利用Go语言上传图像并生成缩略图

    承前文:Go语言中对图像进行缩放 //利用Go语言上传图像并生成缩略图 func upload(w http.ResponseWriter, req *http.Request, link strin ...

  9. C语言二级背诵小抄,计算机二级C语言上题库(可缩印做小抄)百分百准确.doc

    计算机二级C语言上题库(可缩印做小抄)百分百准确 第一套 程序填空 程序通过定义学生结构体数组,存储了若干个学生的学号.姓名和三门课的成绩.函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典 ...

最新文章

  1. 干掉 Postman?测试接口直接生成API文档,这工具真香!
  2. 面试官:能说一说Mysql缓存池吗?
  3. 百度的TSDB——可针对tag查询,应该类似kairosDB
  4. 设计模式系列 - 原型模式
  5. 2019年Java编程开发值得学习的10大技术
  6. memtrack: Couldn‘t load memtrack module (No such file or directory) 的问题解决
  7. Spring Boot 项目优化和Jvm调优 (楼主亲测,真实有效)
  8. 地理探测器 GD包下载及应用(R语言,基于Rstudio)
  9. 仿照LFW的pair.txt生成自己数据集的txt文件
  10. 计算机管理的服务打不开,Windows 系统服务无法打开解决方法+操作命令详解
  11. excel去掉公式()
  12. 关于JavaScript中 “Uncaught TypeError: date.getDay is not a function“的问题
  13. 树莓派上搭建rtsp流媒体服务器
  14. MATLAB函数合辑
  15. 二叉树的深度怎么算(Java代码实现)
  16. BUUCTF笔记之Real部分WP(一)
  17. c语言3 17,C语言修仙
  18. 【Unity3D—C#】按下任意按键,返回按键的名称 以及 KeyCode键码详解
  19. 计算机专业河南单招,河南单招计算机专业专科学校排名
  20. 关于开展上海市2022年度高新技术企业认定管理相关工作的通知

热门文章

  1. c语言延时系统,基于VB的单片机C语言延时程序各参数计算系统
  2. go字符串转byte_go语言学习-基本数据类型
  3. Python中GIL(全局解释器锁)
  4. java web 常用工具类_Javaweb常用工具类及配置文件备份
  5. gcn在图像上的应用_GCN的概念与应用
  6. 汇编语言中xor指令_汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作...
  7. mysql mpm_使用Zabbix + MPM全面监控MySQL
  8. 查询oracle数据库的表格数据类型,excel表格中如何查询数据库数据类型-我想把excel表格中的数据导入oracle数据库中,想在......
  9. Spring Boot基础学习笔记07:Spring Boot整合JPA
  10. 列表视图案例2——显示用户列表