无法将type()的值转换为期望的参数类型bool(Swift)?

问题描述:

我有以下代码:无法将type()的值转换为期望的参数类型bool(Swift)?

func saveContext() { 
    var error: NSError? = nil 
    let managedObjectContext = self.managedObjectContext 
    if managedObjectContext != nil { 
     if managedObjectContext.hasChanges && !managedObjectContext.save(){ 
      abort() 
     } 
    } 
} 

我有两个错误:调用可以抛出,但没有打上尝试,并没有被处理的错误。另一个说不能将type()的值转换为期望的参数类型'Bool'。

我该如何解决这个问题?

+0

什么是您的部署目标? – Retterdesdialogs

+0

请注意,有* [许多* Q&A'关于'[迅速]电话可以扔,但没有用try'标记... ... –

​​的文档有误导性。它在Swift中实际上没有返回值。相反,它可能会引发错误。

您的两个错误是因为您忽略了throws并将其视为它会返回Bool

你的代码需要是这样的:

func saveContext() { 
    var error: NSError? = nil 
    let managedObjectContext = self.managedObjectContext 
    if managedObjectContext != nil { 
     if managedObjectContext.hasChanges { 
      do { 
       try managedObjectContext.save() 
      } catch { 
       print("Unable to save: \(error)") 
       abort() 
      } 
     } else { 
      abort() 
     } 
    } 
} 
+0

https://developer.apple.com/reference/coredata/nsmanagedobjectcontext/1506866-save误导哪里? –

+0

@MartinR在Swift中,它记录了一个返回值,尽管它没有返回值。 – rmaddy

+0

只有Objective-C视图。 Swift视图被记录为'func save()throws' –

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let managedContext = appDelegate.persistentContainer.viewContext 

    do { 
     try managedContext.save() 

    } catch let error as NSError { 
     print("Could not save. \(error), \(error.userInfo)") 
    } 
+1

评论的一句话? – Losiowaty

+0

仅有代码的答案在这里不受欢迎。请解释什么是错的,以及你的答案如何解决这个问题。 – rmaddy

+0

问题是如何解决这个问题;) – Retterdesdialogs