Obj-C框架返回nil,并且崩溃我的Swift代码说“致命错误:在解开一个Optional值时出乎意料地发现了nil”#39;

时间:2015-04-09 08:28:33

标签: ios objective-c swift

我使用的是用Obj-C编写的第三方框架,它有一个函数:

- (NSError *)generateModelForm

If this method is successful it will return nil. If it doesn't return nil, it will return an error which you can check for debugging purposes.

现在,当我使用桥接头并执行所有必需的东西在我的Swift文件中调用此函数时,它总是在第一行崩溃,说“致命错误:在展开可选值时意外发现nil”

我的Swift代码:

if let error = object.generateModelForm()
{
    println("Error : \(error)")
}
else
{
     println("Successfully generated model form, proceed ahead.")
}

我已经完成了关于link的描述。但它几乎没有帮助我,因为我使用的函数是用Obj-C编写的预定义框架的一部分。

我尝试用,

替换第一行
let error = object.generateModelForm() as NSError?
let error : NSError? = object.generateModelForm()

此外,即使尝试直接调用object.generateModelForm()而没有捕获返回NSError值,它仍然会崩溃。

我在过去的2天里摸不着头脑,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

如果'object'是可选项,请尝试object?.generateModelForm() ...使用'?'。

答案 1 :(得分:1)

如果你一直在使用Swift 1.1,你应该在执行时解包,如果让

if let error = object.generateModelForm()? {
  //do stuff
}

请注意,if let只允许您执行操作,如果您为if-block内部的作用域创建的常量变量实际上是一个未包装的现有对象。您要做的是将可选项设置为非可选

Swift 1.2(从2015年4月9日开始使用Xcode 6.3提供)你不需要添加它,但是如果你想把它作为NSError转换

if let error = object.generateModelForm() as? NSError {
  //do stuff
}