Search code examples
listswiftuichildren

File Tree using children in List, how do I keep the File Tree shape?


List(
    [root],
    children: \.children)
) { item in
    
}

It has the same structure as above.

I want to show files to the user as they are automatically opened by searching in the File Tree. Is there a way?

List with hierarchy with search bar above


Solution

  • View

    struct ContentView: View {
    
        @StateObject var disk = Disk()
    
        var body: some View {
            List(disk.items, children: \.children) { item in
                Label() {
                    Text(item.name)
                } icon: {
                    Image(systemName: "folder")
                }
            }
        }
    }
    

    Model

    class Disk: ObservableObject {
        @Published var items: [Item]
    
        init() {
            let item1 = Item(id: 1, name: "child 1", children: nil)
            let item2 = Item(id: 2, name: "child 2", children: nil)
            let item3 = Item(id: 3, name: "child 3", children: nil)
            let item4 = Item(id: 4, name: "child 4", children: [item1, item2, item3])
            let item5 = Item(id: 5, name: "child 5", children: nil)
            let item6 = Item(id: 6, name: "child 6", children: nil)
            let root = Item(id: 7, name: "Parent", children: [item4, item5, item6])
            items = [root]
        }
    }
    
    struct Item: Identifiable {
        var id: Int
        var name: String
        var children: [Item]?
    }