Deniss Deniss - 4 months ago 1034
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


because
NSFetchRequest
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
Level
how should I request correctly?

Because this not working:

let request: NSFetchRequest<Level> = Level.fetchRequest

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

or

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.

Comments