【发布时间】:2019-08-12 19:48:37
【问题描述】:
使用do-catch 在catch 块中返回抛出的错误消息:
do {
data = try Data(contentsOf: url)
} catch {
print(error) // Using `error`
}
是否可以使用try?访问error:
guard let data = try? Data(contentsOf: url) else { /* access error here */ }
【问题讨论】:
-
不,这正是您通过说
try?丢弃的内容。如果您不想丢失错误,请不要这样做。 -
不,当您不关心引发的实际错误时,您使用
try?。结果要么为 nil,无论发生何种错误,您都以相同的方式处理错误,或者它不是 nil,因为没有引发错误。 -
@danielhadar 我不确定,我认为这是一个相当不错的问题。我唯一要更改的是添加您要尝试解决的问题。你只是为了满足好奇心吗?
do/catch有一些您试图通过使用guard来减轻的不愉快后果,还有其他原因吗?等等 -
@Alexander
do-catch和try?的区别在于,首先,使用data的代码也应该设置在do块内(或者在外面定义var data: Data,但是 eww)。 -
@danielhadar 如果
catch块以其他方式返回或破坏范围(无论如何,在guard的else语句中是必需的),那么Swift 明确的初始化逻辑可以处理那个。声明数据为let data: Data,在do块中赋值,在catch块中退出作用域,在catch之后可以访问data。
标签: swift error-handling try-catch