在 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 Protocol 的 enum 创建您的自定义错误类型:
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/