热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解决Swift中'!'一元运算符无法应用于'()'类型的问题

在Swift编程中,遇到错误提示“一元运算符'!'不能应用于'()'类型的操作数”,通常是因为尝试对没有返回值的方法或函数应用逻辑非运算符。本文将详细解释该错误的原因,并提供解决方案。

错误信息:Unary operator '!' cannot be applied to an operand of type '()'


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



此错误通常出现在 Swift 2 迁移过程中。


在从旧版本迁移到 Swift 2 时可能会遇到此问题。


func saveContext() {

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

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 && !managedObjectContext.save()) 这一行代码中。


解决方案



#1 解决方案





1  


错误的原因是方法 save() 没有返回值(即返回类型为 ()),因此不能对其使用逻辑非运算符 !


实际上,save() 方法在 Swift 2 中被设计为抛出异常,而不是返回布尔值:


func save() throws

因此,可以使用 do-catch 结构来处理保存操作是否成功:


以下是改进后的代码示例:


func saveContext() {
guard let managedObjectCOntext= VPDataManager.sharedInstance.persistentStack.managedObjectContext else { return }

if managedObjectContext.hasChanges {
do {
try managedObjectContext.save()
} catch {
// 替换此实现以适当处理错误。
// 使用 abort() 会导致应用程序崩溃并生成日志,仅在开发期间使用。
let nserror = error as NSError
NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
abort()
}
}
}



推荐阅读
author-avatar
無名--小貞貞貞貞貞貞貞貞_微博_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有