我有如下代码:
if let vc = NSStoryboard.main?.instantiateController(withIdentifier: someIdentifier) as? Self{
return vc
}else{
//handle error case
return nil
}
并且当它使用在我的情节提要中找不到的标识符运行时,它不会进入else情况,而是将错误输出到控制台并立即返回(不会崩溃)。因为它的行为非常像抛出错误,所以我尝试用do-catch包围它,如下所示:
do{
if let vc = try NSStoryboard.main?.instantiateController(withIdentifier: someIdentifier) as? Self{
return vc
}
}catch{
//handle error
}
但是这给了我警告,该方法不会引发错误,因此永远不会到达catch块。无论如何,我都运行它,并确保没有达到捕获块。它改为将错误打印到控制台,并且似乎立即返回。
有人可以向我解释这里发生了什么以及如何“捕获”此错误吗?
注:为澄清起见,我理解为什么视图控制器的实例化失败,但是我想动态地处理该错误情况。那就是我遇到的问题。
如果在XCode中启用“所有Objective-C异常”断点,您会看到它抛出了Objective C异常,而我上次检查时,没有安全的方法可以在Swift中从Objective-C异常中恢复。