如何将类型应用到NSFetchRequest实例? [英] How to apply the type to a NSFetchRequest instance?

查看:86
本文介绍了如何将类型应用到NSFetchRequest实例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Swift 2中,以下代码正在工作:

In Swift 2 the following code was working:

let request = NSFetchRequest(entityName: String)

,但在Swift 3中会出现错误:

but in Swift 3 it gives error:


无法推断通用参数ResultType

Generic parameter "ResultType" could not be inferred

因为 NSFetchRequest 现在是一个泛型类型。在他们的文档中,他们写这个:

because NSFetchRequest is now a generic type. In their documents they wrote this:

let request: NSFetchRequest<Animal> = Animal.fetchRequest

所以如果我的结果类是例如 code>我应该如何正确请求?

so if my result class is for example Level how should I request correctly?

因为这不工作:

let request: NSFetchRequest<Level> = Level.fetchRequest


推荐答案

let request: NSFetchRequest<NSFetchRequestResult> = Level.fetchRequest()

let request: NSFetchRequest<Level> = Level.fetchRequest()

取决于您想要的版本。

您必须指定通用类型,否则方法调用是不明确的。

You have to specify the generic type because otherwise the method call is ambiguous.

第一个版本定义为 NSManagedObject ,第二个版本是为每个使用扩展名的对象自动生成的,例如:

The first version is defined for NSManagedObject, the second version is generated automatically for every object using an extension, e.g:

extension Level {
    @nonobjc class func fetchRequest() -> NSFetchRequest<Level> {
        return NSFetchRequest<Level>(entityName: "Level");
    }

    @NSManaged var timeStamp: NSDate?
}

整个问题是去掉字符串常量的用法。

The whole point is to remove the usage of String constants.

这篇关于如何将类型应用到NSFetchRequest实例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆