AKi*_*Uea 9 try-catch fatal-error ios swift
我正在尝试使用Swift 2.0 try-catch.
我原来有以下代码
override func viewDidLoad()
{
var obj : Object?;
Hi( obj );
}
Run Code Online (Sandbox Code Playgroud)
但它会产生错误
func Hi( open : Open? ) -> Open?
{
open!.Hi(); <-- here is error point. Fatal error !
print( "OK" );
return open;
}
Run Code Online (Sandbox Code Playgroud)
因此我将viewDidLoad()中的代码更改为:
override func viewDidLoad()
{
try
{
var obj : Object?;
Hi( obj );
}
catch
{
print( "bug !!!" ); <- I want to this !!!
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用!
我猜swift的try-catch与C,C#不同.
我怎样才能发现致命错误?
以下可能是一个适当的快速方式?
func Hi( open : Open? ) -> Open?
{
if let op = open
{
op.Hi();
print( "OK" );
return open;
}
else
{
return nil;
}
}
Run Code Online (Sandbox Code Playgroud)
你不应该抓住fatalerror.它表示编程错误.您没有发现编程错误,修复了代码.崩溃是故意的,你故意不能阻止它.
涉及关键字try,catch和throw的东西在Swift 2中可用,但这与您似乎正在考虑的C++异常完全不同.
小智 -2
Hi()当您像这样调用: 时,如果为零,open!.Hi();您的程序可能会崩溃。open
open是一个参数,作为该参数传递的值在调用站点上定义如下:var obj : Object?;。您正在定义一个名为objtype 的新变量Object?,但没有为其分配值。这意味着obj将为零,因此open将为零,这会导致open!.Hi()崩溃。
要解决这个问题,请确保为 的参数赋值Hi。最好也将参数设置为非可选,这样您就不必强制解开它来调用其上的函数。
| 归档时间: |
|
| 查看次数: |
5920 次 |
| 最近记录: |