swift可以捕获致命错误?

时间:2015-07-10 07:32:40

标签: ios swift try-catch fatal-error

我正在尝试使用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;
    }
}

2 个答案:

答案 0 :(得分:8)

你不应该抓住fatalerror。它表示编程错误。您没有发现编程错误,修复了代码。崩溃是故意的,你故意不能阻止它。

Swift 2中提供了涉及关键字try,catch和throw的内容,但这与您似乎正在考虑的C ++异常完全不同。

答案 1 :(得分:0)

当你这样调用Hi()open!.Hi();时,如果open为零,你的程序可能会崩溃。

open是一个参数,并且作为该参数传递的值在调用站点上定义为:var obj : Object?;。您正在定义一个名为obj的新变量,类型为Object?,但您没有为其赋值。这意味着obj将为零,因此open将为零,这会导致open!.Hi()崩溃。

要解决此问题,请确保为Hi的参数指定值。将参数设置为非可选参数可能会更好,因此您不必强行打开它来调用它上面的函数。