我有一个类似的类:
class Flight: Object {
dynamic var flightNumber = ""
dynamic var departureApt = ""
dynamic var arrivalApt = ""
dynamic var nextFlight : Flight?
dynamic var previousFlight : Flight?
}
A'航班'可能包含nextFlight和/或previousFlight,但不保证。我的目标是查询航班并检查是否是另一航班的孩子(父母航班的下一航班或前一航班)。
在Realm 0.100之前,我使用以下代码检索父级:
if let parent = flight.linkingObjects(Flight.self, forProperty: "previousFlight").first {
print("This flight has a parent flight: \(parent.flightNumber)")
}
我现在不确定如何使用Realm 0.100实现相同的功能,并希望得到一些反馈!
修改
我现在已经能够达到我想要的结果,但我不确定这是否是正确的方法。我添加了一个以这种方式查找父级的变量:
let parentForNext = LinkingObjects(fromType: Flight.self, property: "nextFlight")
let parentForPrevious = LinkingObjects(fromType: Flight.self, property: "previousFlight")
var parent : Flight? {
get {
return parentForNext.first ?? parentForPrevious.first ?? nil
}
}
答案 0 :(得分:2)
{1}}方法在Realm Swift 0.100中已被弃用(有关详情,请参阅release post)。
这是因为在Realm中声明反向关系有一种更强大(虽然稍微冗长)的方式:通过模型上的Object.linkingObjects(_:property:)
属性类型。这允许链接对象的行为类似于实时,自动更新LinkingObjects
属性或List
查询。所以你知道你得到的对象永远不会过时,这一点尤其重要,因为所有其他Realm类型都会自动更新。它还允许查询反向关系,就好像它们是前向关系(Results
属性)。
所以如果你在0.100之前做到了这一点:
List
等效于0.100及更高版本(在模型上):
let parent = flight.linkingObjects(Flight.self, forProperty: "previousFlight").first
在你的第二个代码示例中,你有多个“父母”,是的,你可以拥有一个计算属性,以你喜欢的方式组合它们:
let parents = LinkingObjects(fromType: Flight.self, property: "previousFlight")
var parent: Flight? { return parents.first }
您可以在Realm的主题文档中详细了解反向关系:https://realm.io/docs/swift/latest/#inverse-relationships