2025-08-03 Swift Concurrency特性总览与 iOS 版本支持

Swift 并发(Swift Concurrency)是 Swift 5.5 引入的一整套原生异步编程模型,目的是让异步编程更安全、清晰、可组合、可维护。它的核心构成包括:


✅ Swift 并发大纲一览

1. 异步函数(async / await

  • async:声明一个异步函数(表示它可能挂起)
  • await:在调用异步函数时使用,表示等待结果
func fetchData() async -> String { ... }
let result = await fetchData()

2. 任务(Task)与任务组

2.1 Task:创建并发任务(子任务、后台任务等)

Task {
    let result = await fetchData()
}

2.2 TaskGroup:并发地启动多个任务,并聚合结果

await withTaskGroup(of: String.self) { group in
    group.addTask { await fetchData1() }
    group.addTask { await fetchData2() }
    for await result in group {
        print(result)
    }
}

3. 结构化并发(Structured Concurrency)

  • 自动追踪任务生命周期(子任务随父任务销毁)
  • async letTaskGroup 实现
async let a = fetchData1()
async let b = fetchData2()
let results = await (a, b)

4. 并发安全(Data Isolation)

Swift 提供机制防止数据竞争。

4.1 actor:主力数据隔离工具

actor Counter {
    private var value = 0
    func increment() { value += 1 }
    func getValue() -> Int { value }
}

4.2 MainActor:确保 UI 代码在主线程执行

@MainActor
class ViewModel {
    func updateUI() { ... }  // 自动切换回主线程
}

5. 取消(Task Cancellation)

任务可被取消,任务内部需检查 Task.isCancelled

Task {
    if Task.isCancelled { return }
}

6. 异步序列(AsyncSequence / AsyncStream

用于异步数据流(类似 Combine、RxSwift)

for await item in myAsyncStream {
    print(item)
}

7. DetachedTask(非结构化任务)

脱离结构化上下文执行的任务。

let task = Task.detached {
    await doSomething()
}

8. Continuation(CheckedContinuation / UnsafeContinuation

桥接传统回调风格(Completion handler)与 async/await

func legacyFunctionAsync() async -> String {
    await withCheckedContinuation { continuation in
        legacyFunction { result in
            continuation.resume(returning: result)
        }
    }
}

9. 并发属性(@Sendable, @MainActor, @globalActor

  • @Sendable: 标记闭包可以安全跨线程执行
  • @MainActor: 标记类/函数必须在主线程
  • @globalActor: 自定义全局 Actor

🧠 总结关键点

特性 功能
async/await 异步函数调用
Task 创建新的异步任务
TaskGroup 并发任务组
actor 数据隔离,线程安全
MainActor UI 操作的主线程保护
AsyncSequence 异步数据流
Continuation 兼容旧式回调
@Sendable 闭包线程安全标记

以下是 Swift 并发(Swift Concurrency)系统的完整大纲,并包含了每个特性的 iOS 支持最低版本(即在哪个 iOS 系统版本中开始可用):


🧵 一、基本构建块(基础并发)

特性 简介 支持版本
async / await 标记异步函数和等待异步结果 ✅ iOS 13+(编译器要求 iOS 15+ 默认启用)
Task 用于创建并执行结构化并发的异步任务 ✅ iOS 15+
Task.sleep 异步睡眠,不阻塞线程 ✅ iOS 15+
TaskGroup 结构化并发下的并行任务组 ✅ iOS 15+
async let 并发启动多个异步任务(语法糖) ✅ iOS 15+
try await 异步错误处理语法 ✅ iOS 15+
await withCheckedContinuation 将传统回调封装为 async 异步调用 ✅ iOS 13+(可选使用),推荐 iOS 15+
DetachedTask 启动脱离当前上下文的独立任务 ✅ iOS 15+

📍 二、主线程调度和隔离

特性 简介 支持版本
@MainActor 保证函数或类属性在主线程上执行 ✅ iOS 15+
MainActor.run 在主线程中执行异步代码块 ✅ iOS 15+
@MainActor + await 后台线程调用时会自动调度回主线程 ✅ iOS 15+

🧩 三、Actors(并发对象模型)

特性 简介 支持版本
actor 类似类,但保证内部状态的线程安全性 ✅ iOS 15+
nonisolated 用于标记不参与 actor 隔离的成员 ✅ iOS 15+
@MainActor actor 指定该 actor 绑定主线程执行 ✅ iOS 15+

📦 四、高级功能

特性 简介 支持版本
Sendable 类型安全特性,用于跨线程发送数据 ✅ iOS 15+
@Sendable closure 明确声明闭包是线程安全的 ✅ iOS 15+
@preconcurrency 向后兼容旧的非并发 API 调用 ✅ iOS 15+
UnstructuredTask 不受父任务控制的异步任务 ✅ iOS 15+

🧪 五、测试和调试工具

工具/概念 简介
Xcode Concurrency Debugger 可视化查看任务执行、actor 使用等并发信息
Instruments with Swift Concurrency 分析异步任务行为与线程调度

📅 支持版本汇总(系统要求)

特性 iOS 支持版本
Swift Concurrency 最核心特性 iOS 13+(部分依赖后备 polyfill 支持)
全量支持(推荐) ✅ iOS 15+
Xcode 13+ + Swift 5.5+ 并发语法正式启用

⚠️ 注意:虽然 async/await 在 iOS 13+ 可运行(通过 back-deployment),但你需要使用 Xcode 13+ 并明确在构建设置中启用支持(Deployment Target ≥ iOS 13,勾选 “Enable Back Deployment of Concurrency”)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容