下面的代码在服务器不可用时捕获Error对象“error”:
do{
let (data, urlResponse) = try await URLSession.shared.data(for: request)
} catch {
print(error)
}
当我阅读URLSession.shared.data
的文档时,没有任何地方提到它也会抛出错误(例如,对于URLSession.shared.dataTask
,它明确声明错误项是返回值的一部分)。
我的意思是代码是工作,但我怎么知道它返回一个错误对象?这部分是绝对不透明的我。
1条答案
按热度按时间y53ybaqx1#
如果您查看the documentation中的
URLSession data(for:delegate:)
,则会显示如下声明:它显示
throws
的事实告诉您必须使用try
调用它,这意味着它可能会抛出您应该捕获的错误。async
告诉您必须使用await
调用它。与
URLSession dataTask(with:completion:)
的不同之处在于dataTask
不“抛出”错误,它不需要try
,完成处理程序包括响应或Error
。这是两种不同的错误处理方法,旧的“完成”方法和新的“快速”异步/抛出方法。
很多API都有两种风格,如果你发现一个Apple API有一个返回
Result
或其他类型的完成处理程序和一个Error
,那么很可能这个API也有一个更新的async/throws
版本。