Подтвердить что ты не робот

Составная область первичного ключа/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 "

Кто-нибудь может помочь мне с примером создания составного первичного ключа?

4b9b3361

Ответ 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 в модели