我离开了一个无人看管的项目好几个月,只是在上周安装了Beta 5,它在修复了 AppDelegate.swift 中的大量'nil'错误之后起作用,今天尝试了Beta 6,'nil'错误再次?
func saveContext () {
var error: NSError? = nil
let managedObjectContext = self.managedObjectContext
if managedObjectContext != nil {
if managedObjectContext.hasChanges && !managedObjectContext.save(&error) {
abort()
}
}
}
var managedObjectContext: NSManagedObjectContext {
if _managedObjectContext == nil {
let coordinator = self.persistentStoreCoordinator
if coordinator != nil {
_managedObjectContext = NSManagedObjectContext()
_managedObjectContext!.persistentStoreCoordinator = coordinator
}
}
return _managedObjectContext!
}
错误说明,特别是在这一行
if managedObjectContext != nil {
'Cannot invoke '!=' with an argument list of type (NSManagedObjectContext, NilLiteralConvertable)'
和
if coordinator != nil {
'Cannot invoke '!=' with an argument list of type (NSPersistantStoreCoordinator, NilLiteralConvertable)'
它在Beta 5中有效,所以我错过了补丁说明中的任何内容吗?
答案 0 :(得分:8)
这是由于Xcode 6 beta 6中的一些变化(参见release notes)。
特别是:
非可选类型可能不再与nil进行比较,ImplicitlyUnwrappedOptional不再符合BooleanType。
您的managedObjectContext
变量属于非可选类型NSManagedObjectContext
。它不能是零,所以检查没用,现在是禁止的。
我不知道您self.persistentStoreCoordinator
的返回类型,但很可能它也是非可选的。
解决方案很简单:删除if
项检查。他们不需要。
已经审核了大量的基础API,用于可选的一致性,删除了一个 来自其接口的大量隐式解包选项。这澄清了 它们的属性和参数的可为空性/它们的方法的返回值。这是一个持续的 从beta 5开始的努力。