@ -762,6 +762,6 @@ if #available(iOS 10, macOS 10.12, *) {
|
||||
if #available(平台名称 版本号, ..., *) {
|
||||
APIs 可用,语句将执行
|
||||
} else {
|
||||
APIs 不可用,语句将不执行
|
||||
APIs 不可用,使用先前版本API的语句将执行
|
||||
}
|
||||
```
|
||||
|
||||
@ -106,7 +106,7 @@ greet(person: "Dave")
|
||||
|
||||
> 注意
|
||||
>
|
||||
> 严格地说,即使没有明确定义返回值,该 `greet(Person:)` 函数仍然返回一个值。没有明确定义返回类型的函数的返回一个 `Void` 类型特殊值,该值为一个空元组,写成 ()。
|
||||
> 严格地说,即使没有明确定义返回值,该 `greet(Person:)` 函数仍然返回一个值。没有明确定义返回类型的函数会返回一个 `Void` 类型特殊值,该值为一个空元组,写成 ()。
|
||||
|
||||
调用函数时,可以忽略该函数的返回值:
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# 并发
|
||||
Swift 对于结构化的编写异步和并行代码有着原生的支持。异步代码可以被挂起并在之后继续执行,同一时间只能有一段代码被执行。代码支持挂起和继续执行,就可以在执行耗时很长的任务时抽空执行一些快速的操作,比如在下载文件、解析文件的过程中更新 UI。*并行代码*指的是多段代码同时执行;比如一个拥有四核处理器的电脑可以同时四段代码,其中的每一个核都可以执行一个任务。一个使用并行和异步代码的程序可以同时执行多个运算;它可以在某个运算等待外部系统的时候挂起这个运算,从而让编写内存安全的代码更加容易。
|
||||
Swift 对于结构化的编写异步和并行代码有着原生的支持。异步代码可以被挂起并在之后继续执行,同一时间只能有一段代码被执行。代码支持挂起和继续执行,就可以在执行耗时很长的任务时抽空执行一些快速的操作,比如在下载文件、解析文件的过程中更新 UI。*并行代码*指的是多段代码同时执行;比如一个拥有四核处理器的电脑可以同时运行四段代码,每个核心执行其中一项任务。一个使用并行和异步代码的程序可以同时执行多个运算;它可以在某个运算等待外部系统的时候挂起这个运算,从而让编写内存安全的代码更加容易。
|
||||
|
||||
并发和异步代码在带来时序灵活性的同时不免会增加复杂度。一些异步代码会自动包含编译时检查——比如,你可以使用 actor 来安全的访问可变的状态。然而,给一段运行缓慢并且有错误的代码添加并发能力并不能让它更快或者更正确的运行。事实上,给代码增加并发能力还有可能导致代码问题更难排查。但如果在需要并发的代码中使用 Swift 原生支持的并发能力会让你在编译阶段就发现问题。
|
||||
|
||||
@ -37,7 +37,7 @@ func listPhotos(inGallery name: String) async -> [String] {
|
||||
```
|
||||
对于那些既是异步又是 throwing 的函数,需要把 `async` 写在`throws` 关键字前边。
|
||||
|
||||
调用一个异步方法时,执行会被挂起直到这个异步方法返回。你需要在调用前增加 `await` 关键字来标记此处为可能的悬点(Suspension point)。这就像调用 throwing 函数需要添加 `throws` 关键字来标记在发生错误的时候会改变程序流程一样。在一个异步方法中,执行只会在调用另一个异步方法的时候会被挂起;挂起永远都不会是隐式或者优先的,这也意味着所有的悬点都需要被标记为 `await`。
|
||||
调用一个异步方法时,执行会被挂起直到这个异步方法返回。你需要在调用前增加 `await` 关键字来标记此处为可能的悬点(Suspension point)。这就像调用 throwing 函数需要添加 `try` 关键字来标记在发生错误的时候会改变程序流程一样。在一个异步方法中,执行只会在调用另一个异步方法的时候会被挂起;挂起永远都不会是隐式或者优先的,这也意味着所有的悬点都需要被标记为 `await`。
|
||||
|
||||
比如,下面的这段代码可以拉取图库中所有图片的名称,然后展示第一张图片:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user