gpt4 book ai didi

swift - 我可以限制函数在 Swift 中抛出的类型吗?

转载 作者:IT王子 更新时间:2023-10-29 05:24:16 26 4
gpt4 key购买 nike

在 Swift 3 中调用一个 throws 的函数时,您必须详尽地捕获所有可能的错误,这通常意味着您有一个不必要的额外 catch {}结束处理不会发生的错误。

是否可以说 throws MyErrorType 以便编译器可以知道您在处理该枚举中的所有情况时确实已经详尽无遗?

最佳答案

对于抛出的错误,没有简单的方法可以保证类型安全。考虑一下,如果编译器允许您指定 throws MyErrorType,那么它还必须确保在该函数体内您没有trying 一个可能潜在的函数在 do/catch block 之外抛出不同的类型。 (好吧,但它会增加不必要的复杂性)。 Swift 编译器在推断类型时可能已经很慢并且会卡在循环中,在抛出函数链上一直推断抛出类型可能是一场噩梦。

目前的想法是,对于大多数错误,您无论如何都将以一小部分方式处理它们。

也就是说,您不需要添加额外的 catch let error as MyErrorType 子句,您可以像这样在 catch block 中简单地使用一个开关:

do {
try something()
} catch let e {
switch e {
case let m as MyErrorType: handleMyError(m)
case let o as OtherErrorType: handleOther(o)
case is ThirdErrorType: print("error \(e)")
default: handleElse(e)
}
}

关于swift - 我可以限制函数在 Swift 中抛出的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39618095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com