var ret: ServiceQuestion?
ret = currentQuestion
return ret ?? ServiceQuestion()
当我像上面一样使用它时工作正常,但当我将代码更改为
时var ret = ServiceQuestion()
ret = currentQuestion
return ret
然后它开始给出当前问题变量可选类型的值' ServiceQuestion?'没有打开;
我需要实现第二种方式如何摆脱这个问题
控制台上出现错误 Cityworks [8230:187999] [错误]错误:CoreData:错误:无法在NSManagedObject类上调用指定的初始化程序' ServiceRequestQuestion'
答案 0 :(得分:0)
您无法在非可选变量中保存可选值。
你必须打开它。
有很多方法可以做到这一点。
最简单(也是最危险的)是...... ret = currentQuestion!
。
但如果currentQuestion
为零,则会崩溃。您必须决定如何打开它。
答案 1 :(得分:0)
由于ret
不再是可选的,您可以在??
运算符中使用其值:
var ret = ServiceQuestion()
ret = currentQuestion ?? ret
但是,当ServiceQuestion
具有值时,这将分配currentQuestion
未使用的内容,因此您的第一个代码段效率更高。它也更容易理解。
答案 2 :(得分:0)
您可以使用强行展开:
return currentQuestion!
...但是不应该使用强制展开,只有在绝对确定价值永远不会是nil
的情况下,才会在非常狭窄和专注的情况下使用。
为什么呢?因为如果值为nil
,您的应用程序将崩溃。考虑更改返回值为可选。
答案 3 :(得分:0)
您可以这样使用它: -
var serviceQuestion = ServiceQuestion()
if let currentQuestion:ServiceQuestion = currentQuestion {
serviceQuestion = currentQuestion
}
return serviceQuestion
答案 4 :(得分:0)
var ret = ServiceQuestion()
ret = currentQuestion
return ret
您收到此错误,因为ret是非可选变量,但currentQuestion是可选的,您将可选变量分配给非可选变量。
你需要做
var serviceQuestion = ServiceQuestion()
if let currentQuestion = currentQuestion {
serviceQuestion = currentQuestion
}
return serviceQuestion
或
var serviceQuestion = ServiceQuestion()
if currentQuestion != nil {
serviceQuestion = currentQuestion!
}
return serviceQuestion
如果你这样做
var serviceQuestion = ServiceQuestion()
serviceQuestion = currentQuestion!
return serviceQuestion
当currentQuestion为nil时可能会崩溃