我停了很多方向。我已经设法使用函数'linkingObjects'来做到这一点,但是自从上次更新以来,它已被弃用,我应该使用对象'LinkingObjects'。

停止

class Stop: Object {
    dynamic var name:String = ""
    var directions = List<Direction>()

    override static func primaryKey() -> String? {
        return "name"
    }
}

旧方向
class Direction: Object {
    dynamic var tag:String = ""
    var stop:Stop? {
        return linkingObjects(Stop.self, forProperty: "directions").first
    }
}

当我将以前的方法应用于新对象时,我总是会得到nil
由LinkingObjects返回的nil的新方向
class Direction: Object {
    dynamic var tag:String = ""
    let stop = LinkingObjects(fromType: Stop.self, property: "directions").first //always return nil
}

但是在这里,我得到了一个元素的数组。因此它可以正常工作。

由LinkingObjects返回的nil的新方向
class Direction: Object {
    dynamic var tag:String = ""
    let stops = LinkingObjects(fromType: Stop.self, property: "directions")
}

问题

还有没有其他方法可以使用“LinkingObjects”而不是最后一个示例,因为每次都使用“direction.stop.first?.name”而不是“direction.stop?.stop”吗?

当然,我可以在“方向”功能中使用,它将始终选择“停靠点”中的第一个元素,但也许我不必这样做。

更新

同时,我正在使用它。这不是理想的解决方案,但可以。
private let stops:LinkingObjects<Stop> = LinkingObjects(fromType: Stop.self, property: "directions")
var stop:Stop? {
    return self.stops.first
}

最佳答案

您目前想出的解决方案是您能做的最好的事情。

我们讨论了是否应该为奇异的反向链接公开任何其他API,但是由于无法在数据存储层上实现其多重性,因此到目前为止还没有道理。此外,您仍然需要包装对象,以便我们传播更新。因此,到目前为止,似乎是通过LinkedObjects检索值的统一方法。

10-08 07:47