iOS:并发仅在 iOS 15.0.0 或更高版本的协议中可用。

11

我有一个应用程序,其部署目标是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,有什么好的解决方案吗?

感谢您的帮助。


2
目前,它只适用于最新的操作系统(iOS 15等)。他们正在尝试进行回退部署(https://github.com/apple/swift/pull/39342),因此值得等待,直到那时再重构所有代码。 - George
2个回答

12

对于其他遇到15.0目标问题的人来说,这很可能与您的XCode版本有关,您需要使用至少XCode 13.2或更高版本来编译使用Swift Concurrency的代码,以在早于iOS 15的版本上运行。


5

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

正如George在他的评论中提到的那样,苹果正在努力解决如何“回退部署”异步/等待支持的问题。如果他们能够做到这一点,您将能够在旧版本上使用现代方法,但我敢打赌苹果不会回溯到iOS 12。

编辑:

请参阅Bradley在下面的评论。如果苹果能够实现,最好的结果就是在iOS 13中支持异步/等待功能。从Bradley发布的链接中可以看出,iOS 12肯定不会得到支持。


如果Concurrency后向部署成功部署(这并不保证),最低部署目标将是iOS 13。请参见此处 - Bradley Mackey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接