11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

Swift 4.2 正式发布

  • 2018-09-27
  • 本文字数:943 字

    阅读完需:约 3 分钟

在 Swift 4 发布了一年之后,Swift 4.2 版本也正式推出。这一版本带来了语言和标准库方面的改进,包括更好的泛型、Hashable 协议以及随机数生成。另外,Swift 语言维护者Ted Kremenek 写道,Swift 4 能提供更快的编译速度,并提升了调试体验。

在语言层面,Swift 4.2 完成了从 Swift 4.1 开始的泛型条件一致性开发工作,它实现了一个规范,即某种类型必须满足某些条件才符合某种协议。例如:

复制代码
extension Array: Equatable where Element: Equatable {
static func ==(lhs: Array<Element>, rhs: Array<Element>) -> Bool { ... }
}

Swift 4.2 添加了在运行时查询类型来获得条件一致性的可能性,而这在 Swift 4.1 中会发生崩溃,例如:

复制代码
if let array = items as? Equatable { //– safely use == here }

Swift 4.2 另外一个有用的功能是 Enum case 的衍生集合,可以通过.allCases 属性迭代所有符合 CaseIterable 协议的 case。

其他的改进包括提供一组新的 API 用于随机数生成和重排更好的散列,以及类型安全的动态成员查

从调试前端来看,Swift 编译器现在支持使用#warning 和#error 指令在代码中标记问题。例如:

复制代码
#warning("Unsafe operation")
#error("Prodive your credentials here")

Kremenek 还特别指出编译器性能获得了提升,这要归功于批处理模式编译和改进的运行时性能(因为对 retain/release 周期的调用发生了变化)。

另外,iOS 开发人员 Javier Soto 在推文中写道:

一年之后,Swift 4.2 版本的 KVO 错误还是没有解决。除非你想体验随机崩溃的感觉,否则不要在 iOS 程序中使用 Swift KVO 语法。

具体来说,当主线程尝试注册观察者(例如更新 UI 元素)的同时,在后台线程运行 KVO keyPathsForValuesAffectingValue 方法可能就会触发这个 bug。

对于所有受到影响的开发人员,可以使用 PMKVObserver ,它是安全强类型的 Swift 4 KVO 语法替代品。

Swift 4.2 与 Swift 4 和 3 代码兼容,并被包括在 Xcode 10 中。通过 Swift Migrator 工具可以轻松实现从早先版本的迁移。

苹果公司在 WWDC 2018 发表一个 40 分钟的演讲中,介绍了Swift 4 的新特性概览,要了解更多详情,请参考官方公告。 Ole Begemann’s Swift 4.2 playground 是学习 Swift 4.2 新功能的一个很好的资源。

查看英文原文 Swift 4.2 Hits the Road

感谢无明对本文的审校。

2018-09-27 16:181956
用户头像

发布了 217 篇内容, 共 58.9 次阅读, 收获喜欢 72 次。

关注

评论 1 条评论

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

这份算法攻略,我拿到了5个大厂的offer

yes

面试 算法 笔试

影视剪辑类自媒体运营心得:如何抓住观众的痛点

石头IT视角

这才是图文并茂:我写了1万多字,就是为了让你了解AQS是怎么运行的

鄙人薛某

Java 并发编程 AQS 并发 ReentrantLock

厉害了!阿里内部都用的Spring+MyBatis源码手册,实战理论两不误

小Q

Java spring 学习 面试 mybatis

2020双十一,阿里云GRTN拉开直播和RTC技术下半场的序幕

阿里云视频云

架构 云直播 直播 流媒体 直播架构

《程序员面试金典》.pdf

田维常

面试

SQL数据库集合运算

正向成长

SQL表联结 SQL集合运算

支撑2715​亿元海量订单 揭秘京东大促背后的数据库基石

京东科技开发者

数据库 数据仓库 云服务 云数据库

Java中NullPointerException的完美解决方案

Silently9527

java8 Optional

【应用运维】公司业务迭代迅速,运维如何高效进行应用发布?

嘉为蓝鲸

可视化 PaaS 运维自动化 部署与维护 发布

响应式关系数据库处理R2DBC

程序那些事

MySQL R2DBC 程序那些事 响应式系统 响应式数据库

直播卖货已成趋势

anyRTC开发者

音视频 WebRTC RTC

为什么容器内存占用居高不下,频频 OOM

996小迁

Java 架构 容器 面试 k8s

读完某C++神作,我只记住了100句话

MySQL从删库到跑路

c++

甲方日常 52

句子

工作 随笔杂谈 日常

【JVM】肝了一周,吐血整理出这份超硬核的JVM笔记(升级版)!!

冰河

性能优化 内存模型 JVM 堆栈 JVM笔记

6个JDK自带JVM调优工具,一次性打包给你说清楚

田维常

jvm调优

微服务架构中的“参天大树”:SpringBoot+SpringCloud+Docker

小Q

Java 学习 容器 面试 微服务

2020年底备战—从技术到面试合集

iOSer

ios 编程 面试

渣本全力以赴33天,四面阿里妈妈(淘宝联盟),拿下实习岗offer

小Q

Java 学习 编程 架构 面试

区块链数字货币商城系统开发模式

薇電13242772558

区块链 数字货币

.net core增强工作流组件,基于稳定平台,多项目整合开发

雯雯写代码

容器和虚拟机到底有啥区别?

网管

容器 虚拟机

什么是服务器租用?

德胜网络-阳

解读登录双因子认证(MFA)特性背后的TOTP原理

华为云开发者联盟

算法 totp 密钥

go-zero 如何扛住流量冲击(一)

万俊峰Kevin

microservice go-zero goctl Go 语言

基于Vue实现一个有点意思的拼拼乐小游戏

徐小夕

Java GitHub 开源 H5游戏 H5

接口测试并不只是测试参数和返回值

测试人生路

接口测试

Vokenization:一种比GPT-3更有常识的视觉语言模型

脑极体

Java中的线程与C++中的区别

jiangling500

Java c++ 线程

SpringBoot-技术专题-Hystrix学习介绍

洛神灬殇

Swift 4.2正式发布_移动_Sergio De Simone_InfoQ精选文章