Я работаю над декодированием данных в объект. Модельные классы:
class ZZBaseObj: Codable {
var fid: String
init() {
fid = ""
}
private enum CodingKeys:String, CodingKey {
case id
}
required init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
fid = try values.decode(String.self, forKey: CodingKeys.id)
}
}
class ZZFileObj: ZZBaseObj {
var columns:[String]
override init() {
columns = [String]()
super.init()
}
private enum CodingKeys:String, CodingKey {
case columns
}
required init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
columns = try values.decode([String].self, forKey: CodingKeys.columns)
try super.init(from: decoder)
}
}
Данные JSON выглядят так:
(
{
columns = (
"first name",
last,
subject,
address,
age
);
id = "1lYc8iIzMdfdfgjGYMKwO4-X3fWe-4GlzfQ-dfs";
},
{
columns = (
"2018/1/30",
100,
"9800"
);
id = "1fdsafdgfQL-fdfdf-fdf";
}
)
Когда я пытаюсь использовать JSONDecoder()
для декодирования данных в объект, ошибки не возникает. Я получаю resultArray, и в консоли я вижу элементы. Затем приходит к EXC_BAD_ACCESS
, когда приходит к следующему коду:
let obj = resultArray[0]
let content = obj.columns //---------error happens here
Я понимаю, что это проблема с памятью, но когда я пытаюсь установить точку останова здесь и при вводе lldb:
po obj.columns
Распечатывает содержимое столбцов.
Это смущает меня. Так как класс ZZFileObj
наследуется от ZZBaseObj
, и я думаю, что-то не хватает для наследования. Я пытаюсь сделать новый класс, который включает в себя FID и столбцы, и это не приходит без ошибок. Однако есть общий атрибут, поэтому мне нужен такой базовый класс для моделей.
Пожалуйста, помогите взглянуть.