java - 如何在 Swift 中向上传递错误堆栈跟踪

标签 java swift exception error-handling exception-handling

在 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");
     }
}

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

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

}

最佳答案

引用Swift - Error Handling Documentation ,你应该:

1- 通过声明符合 Error Protocolenum 创建您的自定义错误类型:

enum CustomError: Error {
    case error01
}

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

func foo() throws {
    throw CustomError.error01
}

3-bar() 声明为可抛出函数:

func bar() throws {
    try foo()
}

请注意,虽然 bar() 是可抛出的(throws),但它包含throw,为什么?因为它用 try 调用 foo() (这也是一个抛出错误的函数)意味着抛出将 - 隐含地 - 转到 foo()

为了更清楚:

4- 实现test()函数(Do-Catch):

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

5-调用test()函数:

test() // error01 has been caught!

可以看到,bar()自动抛错,是指foo()函数抛错。

关于java - 如何在 Swift 中向上传递错误堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43751609/

相关文章:

java - 关于 HashMap.get(key) 函数

ios - 如何在 Swift 中根据字符对字符串进行哈希处理?

c# - Convert.ToInt32 与 TryParse

java - Java 8 函数式编程中 'reduce' 函数的第三个参数的用途

java - 在java 6中我们需要访问者来进行注释处理吗?

java - int 与 long 比较会损害 Java 的性能吗?

Swift 继承/对象结构

ios - 项目中不允许旋转到横向,但在 iPad 上仍然旋转

Java 异常(如果方法返回 false)

hibernate - 无法捕获由违反约束引起的 hibernate 异常