编辑:我想问的是,我是否想在调用throwingFunc1和调用throwingFunc2时向catch块(即一个catch块)写入逻辑。如何构造代码。
例如:
func throwingFunc1(_ par: Int) throws -> Int {
do {
let model = try throwingFunc2(par: "hello")
} catch let err {
print(err)
// reaching here.
}
}
func throwingFunc2(par: String) throws -> Int {
//return something
}现在我想要的是,当我调用throwingFunc1时,在一个do-catch块中,没有调用catch块。就像这样:
do {
let m = throwingFunc1(2)
} catch let error {
//Not reaching here.
}如何构造此代码,以便在throwingFunc2发送错误时触发两个catch块?
发布于 2022-09-13 13:33:00
如果你想让调用者看到错误,你需要重新抛出错误。目前您正在处理错误,因此不会重新抛出。重投:
func throwingFunc1(_ par: Int) throws -> Int {
do {
let model = try throwingFunc2(par: "hello")
} catch let err {
print(err)
throw err // <---- re-throw the error.
}
}如果在catch中没有thowingFunc1逻辑,则可以删除do/catch,try将自动抛出给调用方。
func throwingFunc1(_ par: Int) throws -> Int {
let model = try throwingFunc2(par: "hello") // throws on failure
}发布于 2022-09-13 13:34:16
您可以在throwingFunc1中的catch块中重新抛出错误。
func throwingFunc1(_ par: Int) throws -> Int {
do {
let model = try throwingFunc2(par: "hello")
} catch let err {
print(err)
throw err
}
}然后执行类似于以下内容的catch块:
do {
let int = try throwingFunc1(1)
} catch {
// ...
}请注意,可以省略catch块模式:
catch {
print(error)
throw error
}https://stackoverflow.com/questions/73703842
复制相似问题