【问题标题】:How can I combined Realm Results<> into a single Result<> set?如何将 Realm Results<> 组合成一个 Result<> 集?
【发布时间】:2021-05-09 23:48:35
【问题描述】:

模型如下(简化示例)

class Parent: Object {
   let id = ObjectId()
   let name: String = "some name"

   let children = List<Child>
}

class Child: Object {
   let id = ObjectId()
   let name: String = "some name"

}

我怎样才能让所有父母的孩子都回来作为结果集?将var all 定义为LazySequence&lt;FlattenSequence&lt;LazyMapSequence&lt;Results&lt;Parent&gt;, List&lt;Child&gt;&gt;.Elements&gt;&gt; 似乎很奇怪

extension Child {

   var all: Results<Child> {
      let parents = realm.objects(Parent.self)

      // Returns LazyMapSequence<Results<Parent>, List<Child>>
      let children = parents.map({$0.children})

      // Returns LazySequence<FlattenSequence<LazyMapSequence<Results<Parent>, List<Child>>.Elements>>
      let all = children.joined()

      return all
   }
}

【问题讨论】:

  • 强制到一个数组?

标签: swift realm


【解决方案1】:

我认为您需要从 ChildParent 的反向关系:

// in Child
let parents = LinkingObjects(fromType: Parent.self, property: "children")

然后,您可以获取所有孩子,并根据他们是否有父母进行过滤:

realm.objects(Child.self).filter("parents.@count > 0")

这会给你一个Result&lt;Child&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2011-06-21
    • 2012-01-01
    • 1970-01-01
    • 2015-02-26
    • 2019-08-27
    相关资源
    最近更新 更多