我如何知道URLSession.shared.data在Swift中抛出错误

j8ag8udp  于 2023-01-29  发布在  Swift
关注(0)|答案(1)|浏览(119)

下面的代码在服务器不可用时捕获Error对象“error”:

do{
    let (data, urlResponse) = try await URLSession.shared.data(for: request)
} catch {
    print(error)
}

当我阅读URLSession.shared.data的文档时,没有任何地方提到它也会抛出错误(例如,对于URLSession.shared.dataTask,它明确声明错误项是返回值的一部分)。
我的意思是代码是工作,但我怎么知道它返回一个错误对象?这部分是绝对不透明的我。

y53ybaqx

y53ybaqx1#

如果您查看the documentation中的URLSession data(for:delegate:),则会显示如下声明:

func data(
    for request: URLRequest,
    delegate: URLSessionTaskDelegate? = nil) async throws -> (Data, URLResponse
)

它显示throws的事实告诉您必须使用try调用它,这意味着它可能会抛出您应该捕获的错误。
async告诉您必须使用await调用它。
URLSession dataTask(with:completion:)的不同之处在于dataTask不“抛出”错误,它不需要try,完成处理程序包括响应或Error
这是两种不同的错误处理方法,旧的“完成”方法和新的“快速”异步/抛出方法。
很多API都有两种风格,如果你发现一个Apple API有一个返回Result或其他类型的完成处理程序和一个Error,那么很可能这个API也有一个更新的async/throws版本。

相关问题