【发布时间】:2021-09-19 05:51:39
【问题描述】:
我尝试使用 Swift 5.5 中新的 Async/Await 功能并尝试了以下代码
let url = URL(string: "http://itunes.apple.com/lookup?bundleId=\(id)&country=at")
let (data, _) = try await URLSession.shared.data(from: url!)
let resultStruct = try jsonDecoder.decode(ResponseStruct.self, from: data)
每次执行此操作时,try await URLSession.shared.data(from: url!) 部分都会引发错误。如果我抓住它并打印error.localizedString,我总是会被“取消”。这发生在所有不同类型的 URL 上。我试图坚持我在网上找到的教程,但我在这里缺少什么?
编辑:我强制应用程序进入运行时异常以获取有关错误的更多详细信息:
Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSURLErrorDomain Code=-999 "cancelled"
正如这篇文章所解释的NSURLErrorDomain error code -999 in iOS,当服务器的 SSL 证书有问题时会发生此错误,我不认为是这种情况,因为我正在访问 iTunes 服务器或请求被其他任何东西取消时在我的应用中,对我来说似乎就是这种情况。
【问题讨论】:
-
你不是在操场上测试吗?
-
不,我在一个 iOS 应用项目中编码。
-
无法复制。我完全尝试了您的代码,前两行成功了。你有事瞒着我们。根据提供的信息,投票结束是不可复制的。
-
另外,从您的其他评论来看,您可能正试图以某种方式将其与 Combine 框架结合起来。那是错误的。
Cancelled正是我期望看到的从未给出.store命令的组合管道。 -
combine 是我先写的替代方案。我有两个功能相同。他们访问 url,然后在结果结构中有一些我保存到字典中的数据,但在这个函数中,这个点永远不会到达。使用 combine 框架的函数按预期工作。我也没有其他东西可以展示。上面的代码包含在一个标有 async 和 throws 的函数中。
标签: ios swift async-await urlsession swift5.5