Супер инициализатор абстрактных сущностей Core Data - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть приложение, где Core Data - это слой модели.Также обновления данных от API.Модель Core Data содержит Rim: Component и Hub: Component, где Component является абстрактной родительской сущностью для Rim и Hub.Как я могу инициализировать суперкласс Component с его общими свойствами для Rim и Hub в их инициализаторах (как для // объектов API в примере ниже)?

NSManagedObject сломал мне голову :-) Вот пример того, что япытаясь понять:

// API objects

protocol APIObject {
    init?(jsonObject: [String: AnyObject])
}

class APIComponentObject: APIObject {
    var manufacturer: String
    var model: String

    required init?(jsonObject: [String: AnyObject]) {
        guard let manufacturer = jsonObject["manufacturer"] as? String else { return nil }
        guard let model = jsonObject["model"] as? String else { return nil }
        self.manufacturer = manufacturer
        self.model = model
    }
}

class APIRimObject: APIComponentObject {
    var sizes: [String: Double]

    required init?(jsonObject: [String: AnyObject]) {
        guard let sizes = jsonObject["sizes"] as? [String: Double] else { return nil }
        self.sizes = sizes
        super.init(jsonObject: jsonObject)
    }
}

class APIHubObject: APIComponentObject {
    var old: Double

    required init?(jsonObject: [String: AnyObject]) {
        guard let old = jsonObject["old"] as? Double else { return nil }
        self.old = old
        super.init(jsonObject: jsonObject)
    }
}

// CoreData objects

class Component: NSManagedObject {
    @NSManaged var manufacturer: String
    @NSManaged var model: String

    convenience init(apiComponentObject: APIComponentObject, entity: NSEntityDescription, context: NSManagedObjectContext) {
        self.init(entity: entity, insertInto: context)
        manufacturer = apiComponentObject.manufacturer
        model = apiComponentObject.model
    }
}

class Rim: Component {
    @NSManaged var sizes: [String: Double]

    convenience init(apiRimObject: APIRimObject, entity: NSEntityDescription, context: NSManagedObjectContext) {
        self.init(entity: entity, insertInto: context)
        //super.init(apiComponentObject: apiRimObject, entity: entity, context: context)
        sizes = apiRimObject.sizes
    }
}

class Hub: Component {
    @NSManaged var old: Double

    convenience init(apiHubObject: APIHubObject, entity: NSEntityDescription, context: NSManagedObjectContext) {
        self.init(entity: entity, insertInto: context)
        //super.init(apiComponentObject: apiHubObject, entity: entity, context: context)
        old = apiHubObject.old
    }
}
...