swift可以捕获致命错误?
我正在尝试使用Swift 2.0 try-catch。
我原来有以下代码
override func viewDidLoad() { var obj : Object?; Hi( obj ); }
但它造成了一个错误
func Hi( open : Open? ) -> Open? { open!.Hi(); <-- here is error point. Fatal error ! print( "OK" ); return open; }
因此,我将viewDidLoad()中的代码更改为:
override func viewDidLoad() { try { var obj : Object?; Hi( obj ); } catch { print( "bug !!!" ); <- I want to this !!! } }
但它不工作!
我猜swift的try-catch不同于C,C#。
我怎样才能抓住致命的错误?
以下可能是一个适当的快捷方式?
func Hi( open : Open? ) -> Open? { if let op = open { op.Hi(); print( "OK" ); return open; } else { return nil; } }
你不应该抓到fatalerror。 这表示编程错误。 你不会发现编程错误,你修复你的代码。 事故是故意的,而且你无法阻止它。
Swift 2提供了一些涉及try,catch和throw的关键字,但是这与你似乎正在考虑的C ++exception没什么两样。
当你像这样调用Hi()
: open!.Hi();
,如果open
是零,你的程序可能会崩溃。
open
是一个参数,作为该parameter passing的值在调用站点上定义如下: var obj : Object?;
。 你正在定义一个名为obj
的types为Object?
的新variablesObject?
,但是你并没有给它赋值。 这意味着obj
将是零,因此open
将是零,这导致open!.Hi()
崩溃。
要解决这个问题,请确保为Hi
的参数赋值。 使参数不可选也许会更好,所以你不必强制打开它来调用它的函数。