Xcode 13中如何调用存在async重载的原有同步方法
解决方法
你遇到的报错是因为Xcode 13为AVAssetWriter的finishWriting()新增了async throws异步重载,Swift编译器默认会优先匹配适配当前上下文的方法版本,当你没有显式指定返回值时,编译器会错误匹配到异步版本,才触发了不支持并发的报错。
可行方案
- 方案1:显式接收同步方法的返回值
Xcode 13之前的原有同步finishWriting()方法自带Bool类型返回值,用来标识写入操作是否成功,你只需要显式声明接收该返回值,即可让编译器自动匹配到同步版本:// 显式接收Bool返回值,编译器会自动匹配同步方法 let writeSuccess = writer.finishWriting() // 后续可按需处理writeSuccess对应的成功/失败逻辑 - 方案2:显式指定方法签名(适用于极端匹配失效场景)
如果显式接收返回值依然不生效,可以手动指定方法签名强制匹配同步版本:// 明确指定要调用返回Bool的同步方法签名 let syncFinishMethod = AVAssetWriter.finishWriting as (AVAssetWriter) -> () -> Bool let writeSuccess = syncFinishMethod(writer)()
注意事项
同步版本的
finishWriting()会阻塞当前调用线程,请勿在主线程调用该方法,避免出现UI卡顿问题。
内容的提问来源于stack exchange,提问作者fenrir_berk
相关产品推荐
相关产品推荐

