В моих проектах я два изолированных модуля, один покрывает сетевую часть, которая вызывает Webservices , а другой - вмещает объект CoreData .
На Webservice par Я вызываю свои конечные точки и использую JSONDecoder
для сопоставления ответа сервера с соответствующим struct
вот так:
public struct ObjectJSONStructure: Codable {
var objectID: Int64
var name: String
var desc: String
private enum CodingKeys: String, CodingKey {
case objectID = "id"
case name
case desc = "description"
}
}
все работает нормально, но при преобразовании этой структуры к объекту CoreData (т.е. классу) и наоборот, я делаю это вручную с помощью custon init
s:
// from CoreData to Object Structure
extension ObjectJSONStructure {
public init(object: MyCoreDataObject) {
glassId = object.id
name = glass.name ?? ""
desc = glass.desc ?? ""
}
}
// From Structure to CoreData
class MyCoreDataObject: NSManagedObject{ /* ... */ }
extension MyCoreDataObject {
convenience init(objectStruct: ObjectJSONStructure, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
self.init(entity: entity, insertInto: context)
self.id = objectStruct.objectID
self.name = objectStruct.name
self.desc = objectStruct.desc
}
}
Итак, сейчас я делаю следующее:
Ответ сервера <<strong> Кодер > ObjectStructure <<strong> Вручную > Объект CoreData
Есть ли способ воспользоваться преимуществами CodingKeys
и этого механизма кодирования / декодирования c в Сопоставить ObjectStructure
с MyCoreDataObject
, например?
Ответ сервера <<strong> Coder > ObjectStructure <<strong> Coder > CoreData Object
* 105 3 *
Это значительно уменьшило бы объем кода, который мне приходилось писать для сопоставления почти 16 объектов.
Спасибо