Я хотел бы выполнить некоторую логику инициализации после того, как функция быстрого кодирования/кодирования завершила декодирование JSON.
struct MyStruct: Codable {
let id: Int
var name: String
init() {
name = "\(id) \(name)"
}
}
Но я получаю ошибку компилятора:
Return from initializer without initializing all stored properties
Что мне ясно, потому что init() хочет, чтобы я инициализировал все свойства. Но добавление init() со всеми необходимыми свойствами также не решает эту проблему, потому что этот инициализатор не вызывается (!) при запуске Codable:
init(id: Int, name: String) {
// This initializer is not called if Decoded from JSON!
self.id = id
self.name = "\(id) \(name)"
}
Тем не менее, есть ли способ выполнить некоторую логику инициализации после завершения декодирования, но без выполнения всего декодирования вручную для каждого свойства? Таким образом, без реализации каждый раз init(from decoder: Decoder)
. В этом коротком примере у меня есть только два простых свойства, но производственный код состоит из тысяч из них.
Спасибо.
name
вычисляемым свойством? - person Inder Kumar Rathore   schedule 16.01.2018init(from:)
, либо прибегнул к методамfinializeInit()
, которые я вызываю вручную после декодирования JSON. - person Gereon   schedule 16.01.2018self.name = "\(id) \(name)"
— что он делает? Добавляет префикс id к имени? - person user28434'mstep   schedule 16.01.2018