我正在開發一個簡單的iOS應用程序來學習Swift,我正在使用Realm。 據我所知,在Realm中,反向關係是通過LinkingObjects
屬性實現的,該屬性是一個包含鏈接到該對象的所有對象的集合。Realm模型中的單反關係
考慮從領域文檔的例子:
class Person: Object {
// ... other property declarations
let dogs = List<Dog>()
}
class Dog: Object {
dynamic var name = ""
dynamic var age = 0
let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}
在我的模型,我知道每個Dog
實例只會有一個所有者,因爲每一個狗,當創建僅被添加到一個Person
的List
。
現在我想有在Dog
類owner: Person
屬性,它唯一的主人引用使代碼更直觀,更簡單的(而不必每次都寫入dog.owners.first
),同時保持延遲加載行爲(他們是懶惰加載,對吧?)。 我不知道查詢「鏈接對象」有多昂貴,但由於會有很多「狗」,我認爲最好不要在對象初始化時訪問它們。
現在這些是我能想到的解決方案:
1:
class Dog: Object {
let owner: Person = LinkingObjects(fromType: Person.self, property: "dogs").first!
}
2A:
class Dog: Object {
private let owners = LinkingObjects(fromType: Person.self, property: "dogs")
lazy var owner: Person = {return self.owners.first!}()
}
2B:
class Dog: Object {
lazy var owner: Person = {
return LinkingObjects(fromType: Person.self, property: "dogs").first!
}()
}
3:
class Dog: Object {
private let owners = LinkingObjects(fromType: Person.self, property: "dogs")
var owner: Person {
return self.owners.first!
}
}
我不認爲「解」是懶加載,並在「解決方案」,該owner
不會被「自動更新」,但是這不應該是一個問題,因爲在我的情況下,Dog
將永遠不會改變所有者。
你會推薦在Swift中有一個單個反比關係嗎?