У меня есть приложение, где 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
}
}