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 内部。
1.2为什么是ABI稳定是重要的
Swift包 Size将变小
语言将变化越小,不在那么频繁
更小的迁移
开发者将可以预编译好Frameworks(当前版本frameworks在 APP编译时编译)
1.3ABI稳定带来的缺点
限制公共接口和符号的变化
限制了Swift的迅速发展
2.Async/Await模式
2.1 Async
异步方案在C#, Python, Javascript 中取得了巨大成功
Async关键字使用类似于现有的throws关键词
声明一个异步函数内部为具有时序异步执行协同函数
2.2 Await
类似于try关键词
声明一个在某一时间点执行的函数,并获得执行结果
2.3 为什么使用Async/Await
当执行多个操作创建复杂的逻辑时,目前版本异步api很low,比如错误处理,回调函数。
当前版本的异步回调闭包让代码很丑陋。
难以理解的队列/线程。
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。它可能看起来像这样:
4.其他的优化
String优化,语言层面对正则表达式的支持,提高String性能
标准库优化
Foundation优化
语法添加
原文链接:https://www.developerinsider.in/what-will-be-new-in-swift-5/