Sab*_*thi 9 concurrency xcode ios swift urlsession
现代并发性Async / Await是通过 Swift 5.5 为 iOS 15 及更高版本引入的,但很快,随着 Xcode 13.2(以及随后的 13.2.1)的发布,它使我们能够使用Async和Await开发 iOS 13+、macOS 10.15+ 等。但是,当我尝试发出这样的异步请求时:
let (data, response) = try await URLSession.shared.data(for: request)
它不能在 iOS 13+ 上运行。相反,我收到一条错误消息:
data(for:delegate:)仅适用于 iOS 15.0 或更高版本
当我将最低部署目标设置为 iOS 15.0 时,该错误消失,但我希望该软件支持 iOS 13.0+。据我所知,data(for:delegate:)仅在 iOS 15.0+ 上受支持,但如果我无法发出异步网络获取请求,向后兼容 13.0+ 有何意义?
data(for:delegate:) 文档-> 其中规定最低 iOS 要求是 15.0
Xcode 发行说明-> 他们提到了在 15 之前将 Swift 并发功能部署到 iOS 的 clang bug 修复
Gus*_*nde 16
\n\n\n尽管 Swift 5.5\xe2\x80\x99s 新的并发系统在 Xcode 13.2 中变得向后兼容,但使用这些新并发功能的一些内置系统 API 仍然仅在 iOS 15、macOS Monterey 等上可用Apple\xe2\x80\x99s 2021 操作系统。
\n
这是 John 为一种方法复制异步/等待驱动的 URLSession API 的方式:
\n@available(iOS, deprecated: 15.0, message: "Use the built-in API instead")\nextension URLSession {\n func data(from url: URL) async throws -> (Data, URLResponse) {\n try await withCheckedThrowingContinuation { continuation in\n let task = self.dataTask(with: url) { data, response, error in\n guard let data = data, let response = response else {\n let error = error ?? URLError(.badServerResponse)\n return continuation.resume(throwing: error)\n }\n\n continuation.resume(returning: (data, response))\n }\n\n task.resume()\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2853 次 |
| 最近记录: |