我收到此错误消息:“条件绑定的初始化程序必须具有可选类型,而不是'NSManagedObjectContext”。
我不确定如何解决此错误。我认为错误在于“if let”。
if let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext {
restaurant = NSEntityDescription.insertNewObjectForEntityForName("Restaurant",
inManagedObjectContext: managedObjectContext) as! Restaurant
restaurant.name = nameTextField.text
restaurant.type = typeTextField.text
restaurant.location = locationTextField.text
restaurant.image = UIImagePNGRepresentation(imageView.image!)
restaurant.isVisited = isVisited
//restaurant.isVisited = NSNumber.convertFromBooleanLiteral(isVisited)
var e: NSError?
if managedObjectContext.save() != true {
print("insert error: \(e!.localizedDescription)")
return
}
}
答案 0 :(得分:6)
如果您想强制转发(as!
),那么您不需要使用可选绑定(if let
),因为您的应用委托将被强制解包。如果managedObjectContext
不是可选的,那么就无法解包,这就是编译器所说的。但是如果你想在一个可选的绑定(if let
)中安全地打开它,你可以通过一个条件downcast(as?
)和可选的链接(?.
)实现这一点:
if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext {
// Do something with managedObjectContext...
}