Я пытаюсь получить свойства для данного объекта в моей базе данных Realm. Каждое свойство отображается правильно, кроме первичного ключа, который всегда имеет значение по умолчанию.
Например:
А. Свифт
@objcMembers class A: Object, Codable{
var id: Int64 = 0
dynamic var otherProperty: String?
private enum CodingKeys: String, CodingKey {
case id
case otherProperty
}
override static func primaryKey() -> String{
return "id"
}
}
Допустим, у нас есть класс А, как показано в приведенном выше примере. Когда я добавляю объект A в базу данных Realm с заданными идентификатор = 10 и другое свойство = "другое свойство", он сохраняется правильно. Я даже вижу это с помощью Realm Browser.
Теперь я пытаюсь использовать следующий код:
let realm = try! Realm()
let aObj = realm.objects(A.self).first
print(aObj!.id) //printing 0
print(aObj!.otherProperty) //printing "other property"
Проблема здесь, очевидно, в том, что я не получаю в aObj значение идентификатор = 10, как я ожидал.
Я попытался отладить его, чтобы увидеть, в чем проблема, и там происходит самое странное. po aObj правильно напечатает мой объект:
Optional<A>
some: A{
id = 10;
otherProperty = "other property"
}
Однако, если я попытаюсь распечатать только идентификатор, поэтому, если я запущу команду po aObj!.id, я получу следующий результат:
Optional<Int64>
- some : 0





Сделайте свой идентификатор динамическим
dynamic var id: Int64 = 0
realm.add(A(value: ["id": 10, "otherProperty": "otherProperty"]) , update: true)
print("aObj?.id") //printing 10