Пользовательское кодирование / декодирование между CoreData и Struct - PullRequest
0 голосов
/ 21 июня 2020

В моих проектах я два изолированных модуля, один покрывает сетевую часть, которая вызывает 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 объектов.

Спасибо

...