Swift5 新特性预览



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/


0