微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – Object!= nil在Beta 5中运行但在Beta 6中不运行?

我在几个月无人看管的情况下离开了一个项目,仅在上周安装了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中运行,所以我错过了补丁说明中的任何内容吗?

解决方法

这是由于Xcode 6 beta 6中的一些变化(见 release notes).

特别是:

Non-optional types may no longer be compared to nil,and ImplicitlyUnwrappedOptional no longer conforms to BooleanType.

您的managedobjectContext变量是非可选类型NSManagedobjectContext.它不能是零,所以检查是无用的,现在是禁止的.

我不知道你的self.persistentStoreCoordinator的返回类型,但很可能它也是一个非可选的.

解决方案很简单:删除if检查.他们不需要.

BTW,也有兴趣的是这种变化,这有点相关:

A large number of Foundation APIs have been audited for optional conformance,removing a significant number of implicitly unwrapped optionals from their interfaces. This clarifies the nullability of their properties and arguments / return values of their methods. This is an ongoing effort since beta 5.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐