产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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

评论

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

如何处理消息丢失问题?

JavaEdge

1月月更

混沌工程之 Linux 网络故障模拟工具TC

zuozewei

Linux 混沌工程 1月月更

(1-14/14) 首位销售人员

mtfelix

300天创作 2022Y300P

打造手淘极简包的轻量化框架

阿里巴巴终端技术

ios android 框架设计 移动开发 包大小

网络安全kali渗透学习 web渗透入门 Kali系统的国内源配置

学神来啦

Hoo虎符研究院|区块链简报 20220117期

区块链前沿News

Hoo虎符 Hoo 虎符研究院 区块链资讯

如何基于知识图谱实体解析技术进行数据优化?

索信达控股

人工智能 AI 知识图谱 数据优化 索信达控股

人效将是快消品企业未来发展的最大瓶颈

百度大脑

人工智能

恒源云(GPUSHARE)_实例关机后如何操作迁移?

恒源云

gpu 运维 实例

Android 64位架构适配

百瓶技术

andiod 客户端

Python 为什么不设计 do-while 循环结构?

Python猫

Python

ThinkPHP6和GatewayWorker简单的示例

CRMEB

前额皮质如何影响我们的工作效率?

LigaAI

工作效率 脑科学

3DCAT荣获2021金陀螺“年度XR行业技术创新奖”“年度优秀VR行业应用奖”两项大奖

3DCAT实时渲染

云计算 教育 VR/AR 渲染 渲染器

Kafka 为什么这么快?多的是你不知道的事

码哥字节

kafka 消息队列 1月日更 1月月更

【高并发】导致并发编程频繁出问题的“幕后黑手”

冰河

并发编程 多线程 高并发 协程 异步编程

实战 MongoDB Aggregate

PingCode研发中心

mongo pipeline Expression

Scrum Master如何参与每日Scrum(Daily Scrum)

Bruce Talk

Scrum 敏捷 Agile Coach/Facilitate

腾讯自选股如何实现单位小时内完成千万级数据运算

ninetyhe

腾讯 海量数据 分布式,

使用无参数函数进行命令执行

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

Go 语言快速入门指南:Go 并发初识

宇宙之一粟

golang 并发 Go 语言 1月月更

CPython 性能将提升 5 倍?faster-python 项目 PEP 659 源码级解读

阿里巴巴终端技术

Python 源码 源码分析 CPython

十大视频场景化应用工具+五大视频领域冠军/顶会算法重磅开源!

百度大脑

深入浅出Apache Pulsar(1):Pulsar vs Kafka

云智慧AIOps社区

kafka 云原生 消息队列 kafka运维 Apache Pulsar 消息系统

架构实战营第 4 期 -- 模块七作业

烈火干柴烛灭田边残月

架构实战营

redis未授权访问漏洞复现

喀拉峻

redis 黑客 网络安全 安全 信息安全

聚类算法有哪些?又是如何分类?

郑州埃文科技

数据分析 聚类算法

使用Rainbond打包业务模块,实现业务积木式拼装

北京好雨科技有限公司

政法委跨单位重点人员联防联控平台建设,治安防控系统开发

a13823115807

APICloud 原生模块、H5模块、多端组件使用教程

YonBuilder低代码开发平台

前端开发 APP开发 APICloud 模块 跨端开发

表单数据高级搜索功能设计

全象云低代码

搜索引擎 前端 低代码 搜索 表单

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