4

我有一个部署目标是 iOS 12.1 的应用程序,其中有许多协议定义了带有完成处理程序的函数,即

protocol P {
    func f(_ completion: @escaping: (String) -> Void)
}

我想用新的 async/await iOS 15 语法替换所有这些,以获得更好的代码可读性:

protocol P {
    func f() async -> String
}

但是这样做时,我得到了错误:

并发仅在 iOS 15.0.0 或更高版本中可用

考虑到我无法将部署目标从 12.1 切换到 15.0,对此有什么好的解决方案?

谢谢您的帮助

4

1 回答 1

4

简短的回答是“目前没有解决方案”。如果您希望您的应用程序在 iOS 12 及更早版本上运行,则不能使用 async/await 调用,除非您要编写所有异步代码的 2 个版本,一个在 iOS < 15 上运行,另一个在 iOS < 15 上运行在 iOS ≥ 15 上。

正如 George 在他的评论中提到的,Apple 正试图弄清楚如何“反向部署”异步/等待支持。如果他们能够做到这一点,您将能够对旧版本使用现代方法,但我敢打赌,Apple 不会回到 iOS 12 这么远。

编辑:

请参阅下面布拉德利的评论。如果 Apple 能够实现这一点,您将获得的最好的结果是 iOS 13 中的异步/等待支持。从 Bradley 发布的链接来看,iOS 12 肯定不会被支持。

于 2021-09-22T14:01:39.417 回答