【问题标题】:Unary operator '!' cannot be applied to an operand of type '()'一元运算符'!'不能应用于“()”类型的操作数
【发布时间】:2015-09-28 17:16:12
【问题描述】:

一元运算符'!'不能应用于“()”类型的操作数

在 Swift 2 迁移中遇到此错误。

func saveContext() {

    if let foregroundMO = VPDataManager.sharedInstance.persistentStack.managedObjectContext
    {
        var error:NSError? = nil;

        let managedObjectContext: NSManagedObjectContext = foregroundMO
        managedObjectContext.mergePolicy = NSOverwriteMergePolicy

        if (managedObjectContext.hasChanges) && !(managedObjectContext.save())
        {
            VPAnalytics.leaveBreadcrumb("AppDelegate saveContext critical error: \(error), \(error?.userInfo)")
            logError("Unresolved issue: \(error), \(error?.userInfo)")
            abort()
        }
    }
}

错误发生在if (managedObjectContext.hasChanges...

【问题讨论】:

  • .save() 是否返回 bool
  • 请注意,额外的括号会使错误消息复杂化。

标签: swift unary-operator


【解决方案1】:

这是因为save方法没有返回值:

func save() throws

失败时会报错,所以你可以像这样检查save是否成功:

func saveContext () {
    if managedObjectContext.hasChanges {
        do {
            try managedObjectContext.save()
        } catch {
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            let nserror = error as NSError
            NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
            abort()
        }
    }
}

【讨论】:

    猜你喜欢
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    相关资源
    最近更新 更多