Swift5 新特性预览转载

1,397 阅读3分钟

对于Apple发布的Swift5,Swift5主要焦点在于ABI(Application Binary Interface)对于Swift标准库的稳定,下面介绍Swift5特性:

1.ABI稳定

1.1什么是ABI稳定

在运行时Swift二进制文件通过ABI与其他的库与组件进行交互,他定义了底层的细节比如函数如何调用,数据如何在内存中呈现,元数据在哪里,以及如何访问等等。

当前已发布的Swift版本中ABI还没稳定,所以每一个APP,都自己包含它Swift版本所对应的Swift Dynamic Library。Swift并没包含在操作系统中,他存在于每一个APP内部。

这意味着任何一个App,比如APP1使用Swift3.0,那么它将包含Swift 3.0 动态库(3.0 ABI)在它内部,但是其他的APP比如APP2它使用Swift3.2,他将包含自己的3.2ABI.

如果Swift ABI稳定下来,Swift将包含在iOS操作系统里边,它将兼容每一个Swift版本,比如APP1使用Swift5.0,但是App2使用Swift5.3,他们都将包含在iOS 内部。
1234567

1.2为什么是ABI稳定是重要的

Swift包 Size将变小

语言将变化越小,不在那么频繁

更小的迁移

开发者将可以预编译好Frameworks(当前版本frameworks在 APP编译时编译)
1234567

1.3ABI稳定带来的缺点

限制公共接口和符号的变化

限制了Swift的迅速发展

2.Async/Await模式

2.1 Async

异步方案在C#, Python, Javascript 中取得了巨大成功

Async关键字使用类似于现有的throws关键词

声明一个异步函数内部为具有时序异步执行协同函数
12345

2.2 Await

类似于try关键词

声明一个在某一时间点执行的函数,并获得执行结果
123

2.3 为什么使用Async/Await

当执行多个操作创建复杂的逻辑时,目前版本异步api很low,比如错误处理,回调函数。

当前版本的异步回调闭包让代码很丑陋。

难以理解的队列/线程。
12345

2.4 例子

为了展示Async/Await的优雅写法,这里以Cocoa开发者遇到的异步问题举例,比如下面的异步问题:

这里写图片描述

现在你可以这样优雅的写

这里写图片描述

3.Actors

Actor是DispatchQueue的组合,他的数据被这个队列保护,而且只能在这个队列运行

Actor是新的类型比如class, struct or protocol

Actor允许开发者定义内部变量和函数,在它内部处理数据或者做一些操作。

Actor没有参数和返回值,不能抛出错误

开发者可以异步地与Actor进行通信,并且它保证他们保护的数据只被在该队列上运行的代码所访问

UIKit和AppKit会使用MainActor对“Main Thread”进行建模

开发者可以定义MainActor的扩展,以便在主线程上运行他们的代码

Actor引用计数为0并且最后排队的消息完成时,Actor会释放。

让我们想象一下,我们正在为具有带有字符串列表的tableview的应用程序构建数据模型。该应用程序具有添加和操作列表的UI。它可能看起来像这样:
1234567891011121314151617

这里写图片描述

4.其他的优化

String优化,语言层面对正则表达式的支持,提高String性能

标准库优化

Foundation优化

语法添加
1234567

原文链接:www.developerinsider.in/what-will-b…