Deniss Deniss - 1 year ago 1668
Swift Question

Swift 3, NSFetchrequest

In Swift 2 the following code was working:

let request = NSFetchRequest(entityName: String)

but in Swift 3 it gives error:

Generic parameter "ResultType" could not be inferred

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

let request: NSFetchRequest<Animal> = Animal.fetchRequest

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

Because this not working:

let request: NSFetchRequest<Level> = Level.fetchRequest

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


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

depending which version you want.

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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download