与新的实时反向关系一对一的关系领域

时间:2016-05-03 14:44:55

标签: ios swift realm

我有一个类似的类:

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

    }

}

1 个答案:

答案 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