条件绑定的初始化程序必须具有可选类型,而不是'NSManagedObjectContext

时间:2015-07-29 02:22:14

标签: ios xcode swift

我收到此错误消息:“条件绑定的初始化程序必须具有可选类型,而不是'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
        }
    }

1 个答案:

答案 0 :(得分:6)

如果您想强制转发(as!),那么您不需要使用可选绑定(if let),因为您的应用委托将被强制解包。如果managedObjectContext不是可选的,那么就无法解包,这就是编译器所说的。但是如果你想在一个可选的绑定(if let)中安全地打开它,你可以通过一个条件downcast(as?)和可选的链接(?.)实现这一点:

if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext {
    // Do something with managedObjectContext...
}