Nested OutlineGroup List with Realm in SwiftUI

Hello everyone,

I’m new to Realm and trying to use it with Swift/SwiftUI. I want to create nested List with OutlineGroup with Realm data. I tried as below

import RealmSwift

class Item: Object, ObjectKeyIdentifiable {
  @Persisted(primaryKey: true) var id: ObjectId
  @Persisted var name = ""
  @Persisted var subItems = RealmSwift.List<Item>()
}

struct ContentView: View {
  @Environment(\.realm) var realm
  @ObservedResults(Item.self) var items

  var body: some View {
      List {
        OutlineGroup(items, children: \.subItems) { item in
            Text(item.name)
        }
      }
  }
}


struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}

However I got error Key path value type ‘List’ cannot be converted to contextual type ‘Results?’ at the line of OutlineGroup(items, children: .subItems) { item in, please see more at the screenshot. I’m not sure how to fix that and would greatly appreciate any assistance. Thank you!

I figured it out. I need to add extension to produce subItemArray. It should look like this

import RealmSwift

class Item: Object, ObjectKeyIdentifiable {
  @Persisted(primaryKey: true) var id: ObjectId
  @Persisted var name = ""
  @Persisted var subItems = RealmSwift.List<Item>()
}

extension Item {
   var subItemArray: [Item]?  {
     subItems.count == 0 ? nil : Array(subItems)
    }
}

struct ContentView: View {
  @Environment(\.realm) var realm
  @ObservedResults(Item.self) var items

  var body: some View {
      List {
        ForEach(items) { item in
          OutlineGroup(item, children: \.subItemArray) { sItem in
              Text(sItem.name)
          }
        }
      }
  }
}


struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}