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的参数赋值。 使参数不可选也许会更好,所以你不必强制打开它来调用它的函数。