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

Jor*_*mez 3 xcode ios 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
        }
    }
Run Code Online (Sandbox Code Playgroud)

Pat*_*nch 6

如果你想强制downcast(as!),那么你不需要使用可选的binding(if let),因为你的app代理将被强制解包.如果managedObjectContext是非可选的,则无法解包,这就是编译器所说的.但是如果你想在可选的binding(if let)中安全地解包它,你可以使用条件downcast(as?)和可选的链接(?.)来实现:

if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext {
    // Do something with managedObjectContext...
}
Run Code Online (Sandbox Code Playgroud)