Dan*_*ase 11 concurrency deployment-target ios swift
我有一个应用程序,其部署目标是 iOS 12.1,其中许多协议定义带有完成处理程序的函数,即
protocol P {
func f(_ completion: @escaping: (String) -> Void)
}
Run Code Online (Sandbox Code Playgroud)
我想用新的 async/await iOS 15 语法替换所有这些,以获得更好的代码可读性:
protocol P {
func f() async -> String
}
Run Code Online (Sandbox Code Playgroud)
但这样做时,我收到错误:
并发仅在 iOS 15.0.0 或更高版本中可用
考虑到我无法将部署目标从 12.1 切换到 15.0,对此有什么好的解决方案吗?
感谢您的帮助
小智 12
对于其他在 15.0 目标上遇到此问题的人。这可能与您的 XCode 版本有关,您需要至少有 XCode 13.2 或更高版本才能在早于 iOS 15 的版本上编译使用 Swift Concurrency 的代码。
简短的回答是“目前没有解决方案”。如果您希望应用程序在 iOS 12 及更早版本上运行,则不能使用 async/await 调用,除非您想编写所有异步代码的 2 个版本,一个在 iOS < 15 上运行,另一个在 iOS < 15 上运行在 iOS \xe2\x89\xa5 15 上。
\n正如乔治在评论中提到的那样,苹果正在尝试找出如何“反向部署”异步/等待支持。如果他们能够做到这一点,你将能够在旧版本中使用现代方法,但我敢打赌苹果不会回到 iOS 12。
\n请参阅下面布拉德利的评论。如果 Apple 能够实现的话,您将获得的最好的结果是 iOS 13 中的异步/等待支持。从 Bradley 发布的链接来看,iOS 12 肯定不会被支持。
\n 归档时间: |
|
查看次数: |
14465 次 |
最近记录: |