Swift Codable: различные стратегии кодирования / кодирования - PullRequest
0 голосов
/ 09 мая 2018

Я использую Perfect Framework для разработки на стороне сервера и хочу использовать ту же модель для базы данных и для ответа / запроса JSON (мне нужно исключить / переименовать некоторые поля). Идеально использовать кодируемый протокол и собственный декодер / кодировщик для БД. Я попробовал решение ниже, но я не знаю, может быть, есть лучшее решение?

struct User: Codable {
    let id: Int
    var username: String
    var password: String
    var fullName: String

    enum CodingKeys: String, CodingKey {
        case id
        case username
        case password
        case fullName = "full_name"
    }

    init(from decoder: Decoder) throws {
        if let options = encoder.userInfo[CodingOptions.key] as? CodingOptions {
            if options.source == "JSON"
                return try self.decodeFromJson(decoder:decoder)
            }
        } else {
             ...decoder code here..
        }
    }
}               
struct CodingOptions {
    let source: String
    static let key = CodingUserInfoKey(rawValue: "a")!
    init(source: String) {
        self.source = source
    }
}
let options = CodingOptions(source: "JSON")
let decoder = JSONDecoder()
ecoder.userInfo = [CodingOptions.key : options]
let user = try decoder.decode(User.self, from: jsonData)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...