【发布时间】:2020-06-17 15:20:13
【问题描述】:
我有如下代码:
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 块。无论如何,我运行了它,果然没有到达 catch 块。而是将错误打印到控制台,并且似乎立即返回。
有人可以向我解释这里发生了什么以及如何“捕捉”这个错误吗?
注意:为了澄清起见,我理解为什么视图控制器的实例化失败,但我想动态处理该错误情况。这就是我遇到的问题。
【问题讨论】:
-
您不应尝试以编程方式捕获此类错误。这基本上是一个致命错误。如果你试图加载一个无效的控制器,这是一个编程错误。