一尘不染

如何在Swift中将错误传递给堆栈跟踪

swift

在Java中,如果一个方法抛出错误,则调用它的方法可以将其传递给下一个方法。

public void foo() throws Exception {
     throw new Exception();
}
public void bar() throws Exception {
     foo();
}
public static void main(String args[]) {
     try {
         bar();
     }
     catch(Exception e) {
         System.out.println("Error");
     }
}

我正在迅速编写一个应用程序,并且希望做同样的事情。这可能吗?如果不可能,还有哪些其他可能的解决方案?我进行调用的原始函数具有此结构。

func convert(name: String) throws -> String {

}

阅读 188

收藏
2020-07-07

共1个答案

一尘不染

参考Swift-
错误处理文档
,您应该:

1- 通过声明符合错误协议的 枚举
来创建自定义错误类型:

enum CustomError: Error {
    case error01
}

2- 声明foo()为可抛出函数:

func foo() throws {
    throw CustomError.error01
}

3- 声明bar()为throwable函数:

func bar() throws {
    try foo()
}

需要注意的是,虽然bar()是抛出(throws),它并 没有
包含throw,为什么呢?因为它调用foo()(这也是一个引发错误的函数)的调用try方式是-将隐式地- 抛出该异常foo()

为了更清楚一点:

4- 实施test()功能(抓捕):

func test() {
    do {
        try bar()
    } catch {
        print("\(error) has been caught!")
    }
}

5- 通话test()功能:

test() // error01 has been caught!

如您所见,bar()自动引发错误,这是指foo()函数错误引发。

2020-07-07