【问题标题】:iOS: Concurrency is only available in iOS 15.0.0 or newer in protocoliOS:并发仅适用于 iOS 15.0.0 或更高版本的协议
【发布时间】:2021-11-15 23:08:24
【问题描述】:

我有一个部署目标是 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,对此有什么好的解决方案?

感谢您的帮助

【问题讨论】:

标签: ios swift concurrency deployment-target


【解决方案1】:

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

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

编辑:

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

【讨论】:

  • 如果Concurrency back部署成功部署(不能保证),最小部署目标将是iOS 13。见here
猜你喜欢
  • 2022-06-19
  • 2018-07-04
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多