Составная область первичного ключа/swift
Я новичок в быстроте и сфере. Я хочу создать составной первичный ключ и когда я попробую что-то вроде этого:
class DbLocation : Object {
dynamic var id = 0
dynamic var tourId = 0
dynamic var uuid : String {
return "\(id)\(tourId)"
}
override static func primaryKey() -> String? {
return "uuid"
}
}
Я получаю эту ошибку:
"Свойство первичного ключа" uuid "не существует на объекте" DbLocation "
Кто-нибудь может помочь мне с примером создания составного первичного ключа?
Ответы
Ответ 1
Это даст вам ответ:
class DbLocation: Object {
dynamic var id = 0
dynamic var tourId = 0
func setCompoundID(id: Int) {
self.id = id
compoundKey = compoundKeyValue()
}
func setCompoundTourId(tourId: Int) {
self.tourId = tourId
compoundKey = compoundKeyValue()
}
dynamic lazy var compoundKey: String = self.compoundKeyValue()
override static func primaryKey() -> String? {
return "compoundKey"
}
func compoundKeyValue() -> String {
return "\(id)\(tourId)"
}
}
Пользовательские сеттеры удостоверяются, что составной код всегда обновляется, ленивое ключевое слово гарантирует, что при первом доступе к нему он будет получен из того, что вы уже установили.
Узнайте больше на эту тему в этой теме, где обсуждалась эта проблема.
Ответ 2
Просто создайте новое свойство, значение которого задано для интересующих других свойств, которые вы ожидаете как составные первичные ключи.
class DbLocation: Object {
dynamic var id = 0
dynamic var tourId = 0
dynamic var compoundKey: String? = ""
override static func primaryKey() -> String? {
return "compoundKey"
}
}
let location = DbLocation()
location.tourId = 1
location.id = 5
location.compoundKey = "\(id) \(tourId)"
Ответ 3
Для последней версии Swift и Realm я бы сделал что-то вроде этого.
dynamic private var compoundKey: String = ""
required convenience init?(map: Map) {
self.init()
if let firstValue = map.JSON["firstValue"] as? String,
let secondValue = map.JSON["secondValue"] as? Int {
compoundKey = firstValue + "|someStringToDistinguish|" + "\(secondValue)"
}
}
Ответ 4
вам нужно было вернуть одно из свойств из вашего объекта
вот пример кода
class FoodModel:Object
{
dynamic var name = ""
dynamic var _id = ""
override static func primaryKey() -> String? {
return "_id"
}
}
Обратите внимание, что _id является var в модели