Swift异步
Swift异步

Swift异步

在Swift中,异步(Asynchronous)指的是任务的执行与调用它的代码的执行不在同一时间完成。

可以理解为,当执行一个操作时,不必等待它结束就可以继续执行后续代码。

核心概念

1、同步(Synchronous):表示调用一个函数时,函数内部的所有操作都必须完成,调用才会返回。

例如:

func add(a: Int, b: Int) -> Int {
    return a + b
}

let result = add(a: 2, b: 3) // 调用时直接执行
print(result)                // 这里会等 add 完成

2、异步(Asynchronous):调用一个函数时,函数可能立即返回,而操作在稍后完成。通常通过回调、闭包或 async/await 处理结果。

func fetchData(completion: @escaping (String) -> Void) {
    DispatchQueue.global().async {
        let data = "Hello"
        completion(data) // 几秒后才调用
    }
}

print("开始请求")
fetchData { result in
    print("收到数据: \(result)")
}
print("继续执行其他代码")

输出的顺序可能是:

开始请求
继续执行其他代码
收到数据: Hello

因为DispatchQueue.global().async是一个异步操作,当调用fetchData方法时,函数会立即返回,不会阻碍顺序调用。

常见的异步场景

1、网络请求

URLSession.shared.dataTask(with: url) { data, response, error in
    // 服务器响应后才执行
}.resume()

调用立即返回,数据在响应后返回。

2、文件读写/数据库操作

DispatchQueue.global().async {
    let content = try? String(contentsOfFile: path)
}

避免阻塞主线程。

3、定时器/延迟操作

DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
    print("2秒后执行")
}

4、UI事件回调

Button("点击") { 
    print("按钮点击") 
}

事件发生时,闭包被调度执行。

5、Swift Concurrency (Task / async-await)

Task {
    let result = await fetchData()
    print(result)
}

Task内闭包在函数返回之后执行。

6、GCD队列调度

DispatchQueue.global().async(后台线程)。

DispatchQueue.main.async(主线程下一 runloop)。

总结

只要闭包或操作在函数返回后执行,都属于异步。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注