You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS部署目标为12.1时协议中使用async/await报错如何解决?

解决方案

你可以根据项目可接受的最低部署版本调整,选择以下适配方案:

  • 方案1:保留原有回调协议,仅为iOS15+扩展async/await接口(兼容iOS12.1,无版本升级要求)
    原有带completion的协议定义完全保留,无需修改历史实现逻辑,仅通过扩展为高版本系统增加async封装方法,所有实现协议的类会自动获得async能力:
    原有协议保持不变:
    protocol P {
        func f(_ completion: @escaping (String) -> Void)
    }
    
    新增iOS15+专属扩展:
    @available(iOS 15.0, *)
    extension P {
        func f() async -> String {
            await withCheckedContinuation { continuation in
                f { result in
                    continuation.resume(returning: result)
                }
            }
        }
    }
    
    适配后,iOS15及以上的业务代码可以直接调用async版本的方法提升可读性,iOS12.1~14的业务代码继续使用原有回调接口即可。
  • 方案2:升级最低部署目标到iOS13,使用Swift Concurrency回退部署特性(改动最小)
    Xcode14及以上版本支持Swift Concurrency回退部署到iOS13.0、macOS10.15及以上版本,如果你可以接受将项目最低部署目标从iOS12.1升级到iOS13.0,无需额外兼容代码,直接写async/await语法即可,不会出现版本报错。
  • 方案3:iOS12.1版本下使用第三方异步库优化回调可读性
    如果必须死守iOS12.1的部署要求,也可以引入支持iOS12的第三方异步库(如老版本PromiseKit、RxSwift),将回调封装为链式调用结构,相比嵌套回调可读性也有明显提升。

内容的提问来源于stack exchange,提问作者Dannis Case

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:48:04