我正在尝试使用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;
}
}
答案 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
的参数指定值。将参数设置为非可选参数可能会更好,因此您不必强行打开它来调用它上面的函数。