Swift5 新特性预览

Posted Cocoa开发者社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift5 新特性预览相关的知识,希望对你有一定的参考价值。

Apple将在今年晚些时候大概秋季发布会发布Swift5Swift5主要焦点在于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开发者遇到的异步问题举例,比如下面的异步问题:



现在你可以这样优雅的写


Swift5 新特性预览


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优化

  • 语法添加


原文链接:


以上是关于Swift5 新特性预览的主要内容,如果未能解决你的问题,请参考以下文章

探索 Swift 5.2 的新函数式特性

FlinkFlink Flink 1.14 新特性预览

SwiftUI:苹果的一次天才尝试

Java 9 新特性快速预览

Kotlin 1.6.0 新特性预览:语法和标准库

Swift 5.3 新特性