50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

评论

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

EMQX+阿里云Tablestore多场景一站式IoT数据解决方案正式发布

EMQ映云科技

阿里云 物联网 一站式平台 emqx 5月月更

2022年中国消费金融数字化发展分析

易观分析

消费金融

文档管理:企业进步的重要因素

小炮

文档管理

谈谈技术能力

阿里巴巴中间件

阿里云 程序员 中间件 技术思考

直播预告丨Hello HarmonyOS进阶课程第四课——ArkUI动画开发

HarmonyOS开发者

HarmonyOS arkui

三分钟让你了解 vue 中的父子通讯

CRMEB

KunlunBase 查询优化(一)

KunlunBase昆仑数据库

MySQL 数据库 国产数据库

关于加密通道规范,你真正用的是TLS,而非SSL

华为云开发者联盟

TLS 加密 ssl 加密通道 CA系统

什么是显卡?GPU服务器到底有什么作用?

Finovy Cloud

gpu GPU服务器

微擎同步粉丝不显示头像和昵称?

智伍应用

微擎 php开源

深入解读SQL的聚集函数

华为云开发者联盟

sql GaussDB(DWS) 聚集操作 主键列

昆仑分布式数据库系统简介 之 SQL 标准兼容性和日常维护工作

KunlunBase昆仑数据库

国产数据库

成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

阿里巴巴中间件

阿里云 中间件 函数计算

干货复盘 | 易观分析“出海非洲战略”专题分享

易观分析

非洲战略

MySQL-8.0 Group Replication 研究与改造汇总

KunlunBase昆仑数据库

国产数据库 MySQL 数据库

昆仑分布式数据库Sequence功能及其实现机制

KunlunBase昆仑数据库

国产数据库

烧录OpenHarmony 3.2(尝鲜版)步骤

离北况归

OpenHarmony OpenHarmony3.2

SaaS应用:企业数字化转型性价比最高的方式

小炮

多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单

蒋川

Vue Element 组件 表单设计 Ant Design

KunlunBase 查询优化(二)Project 和 Filter 下推

KunlunBase昆仑数据库

国产数据库

火山引擎A/B测试私有化实践

字节跳动数据平台

实验 火山引擎 私有化部署 ab测试

《阿里云代码安全白皮书》5个维度应对3类代码安全问题

阿里云云效

云计算 阿里云 代码管理 代码托管 代码安全

满满干货!手把手教你实现基于eTS的HarmonyOS分布式计算器

HarmonyOS开发者

HarmonyOS ETS

【LeetCode】调整数组顺序使奇数位于偶数前面Java题解

Albert

LeetCode 5月月更

KunlunBase 查询优化(三)排序下推

KunlunBase昆仑数据库

国产数据库

昆仑数据库可定制的数据分片方案

KunlunBase昆仑数据库

国产数据库

数据库系统最佳实践系列 --- 使用 prepared statement

KunlunBase昆仑数据库

国产数据库

手绘图解java类加载原理

华为云开发者联盟

Java 类加载 元数据 类静态

netty系列之:epoll传输协议详解

程序那些事

Java Netty 程序那些事 5月月更

2022第八届华为软件精英挑战赛全球总决赛圆满落幕,冠军奖金20万!

科技热闻

热烈庆祝“海泰密码技术融合创新中心&数据中心重启安全工程”双中心智能重启用

电子信息发烧客

网络安全 科技 科技企业

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