У меня есть JSON-API, который возвращает мне массивы Courses
. У Courses
есть CourseLocations
, CourseTypes
и т. Д. Все они имеют первичные ключи. Я подумал, что было бы здорово разобрать все с помощью Codable
и обновить его с помощью Realm().add(_:update:)
.
Все отлично работает. Проблема возникает, когда API не возвращает полный объект.
Скажем так. API "/ types" возвращает мне массив ниже, и он имеет все необходимые данные для создания или обновления объекта.
[
{ "id": "1", "name": "Type 1", "sessions": 10, "sessionTime": 120.0 },
{ "id": "2", "name": "Type 2", "sessions": 5, "sessionTime": 20.0 }
]
Но затем я вызываю другой метод API "/ courses", который возвращает мне информацию о курсе плюс объект "типы", но не все, только его id
и name
:
[
{
"id": "0013",
"name": "Super cool course",
"type": { "id": "2", "name": "Type 2" }
}
]
Итак, когда я делаю «add (_: update :)» для курса, я фактически обновляю все значения моего CourseType
объекта, а не только имя. В результате мои свойства sessions
и sessionTime
установлены в 0.
Как мне этого избежать?
Вот класс для справки.
class CourseType: Object, Decodable {
@objc dynamic var identifier = UUID().uuidString
@objc dynamic var name = ""
@objc dynamic var sessions = 0
@objc dynamic var sessionTime = 0.0
private enum CodingKeys: String, CodingKey {
case identifier = "id"
case name
case sessions
case sessionTime = "session_time"
}
override static func primaryKey() -> String {
return "identifier"
}
}