首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在抛出函数中编写抛出函数,以便两者都能工作/捕获逻辑?

如何在抛出函数中编写抛出函数,以便两者都能工作/捕获逻辑?
EN

Stack Overflow用户
提问于 2022-09-13 13:27:10
回答 2查看 49关注 0票数 0

编辑:我想问的是,我是否想在调用throwingFunc1和调用throwingFunc2时向catch块(即一个catch块)写入逻辑。如何构造代码。

例如:

代码语言:javascript
复制
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块。就像这样:

代码语言:javascript
复制
do {
   let m = throwingFunc1(2)
  } catch let error {
   //Not reaching here.
 }

如何构造此代码,以便在throwingFunc2发送错误时触发两个catch块?

EN

回答 2

Stack Overflow用户

发布于 2022-09-13 13:33:00

如果你想让调用者看到错误,你需要重新抛出错误。目前您正在处理错误,因此不会重新抛出。重投:

代码语言:javascript
复制
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/catchtry将自动抛出给调用方。

代码语言:javascript
复制
func throwingFunc1(_ par: Int) throws -> Int {
    let model = try throwingFunc2(par: "hello") // throws on failure
 }
票数 3
EN

Stack Overflow用户

发布于 2022-09-13 13:34:16

您可以在throwingFunc1中的catch块中重新抛出错误。

代码语言:javascript
复制
func throwingFunc1(_ par: Int) throws -> Int {
    do {
        let model = try throwingFunc2(par: "hello")
    } catch let err {
        print(err)
        throw err
    }
}

然后执行类似于以下内容的catch块:

代码语言:javascript
复制
do {
    let int = try throwingFunc1(1)
} catch {
    // ...
}

请注意,可以省略catch块模式:

代码语言:javascript
复制
catch {
    print(error)
    throw error
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73703842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档