Contents

OutlineGroup

A structure that computes views and disclosure groups on demand from an underlying collection of tree-structured, identified data.

Declaration

struct OutlineGroup<Data, ID, Parent, Leaf, Subgroup> where Data : RandomAccessCollection, ID : Hashable

Mentioned in

Overview

Use an outline group when you need a view that can represent a hierarchy of data by using disclosure views. This allows the user to navigate the tree structure by using the disclosure views to expand and collapse branches.

In the following example, a tree structure of FileItem data offers a simplified view of a file system. Passing the root of this tree and the key path of its children allows you to quickly create a visual representation of the file system.

struct FileItem: Hashable, Identifiable, CustomStringConvertible {
    var id: Self { self }
    var name: String
    var children: [FileItem]? = nil
    var description: String {
        switch children {
        case nil:
            return "πŸ“„ \(name)"
        case .some(let children):
            return children.isEmpty ? "πŸ“‚ \(name)" : "πŸ“ \(name)"
        }
    }
}

let data =
  FileItem(name: "users", children:
    [FileItem(name: "user1234", children:
      [FileItem(name: "Photos", children:
        [FileItem(name: "photo001.jpg"),
         FileItem(name: "photo002.jpg")]),
       FileItem(name: "Movies", children:
         [FileItem(name: "movie001.mp4")]),
          FileItem(name: "Documents", children: [])
      ]),
     FileItem(name: "newuser", children:
       [FileItem(name: "Documents", children: [])
       ])
    ])

OutlineGroup(data, children: \.children) { item in
    Text("\(item.description)")
}

Type parameters

Five generic type constraints define a specific OutlineGroup instance:

  • Data: The type of a collection containing the children of an element in the tree-shaped data.

  • ID: The type of the identifier for an element.

  • Parent: The type of the visual representation of an element whose children property is non-nil

  • Leaf: The type of the visual representation of an element whose children property is nil.

  • Subgroup: A type of a view that groups a parent view and a view representing its children, typically with some mechanism for showing and hiding the children

Topics

Creating an outline group

Supporting types

See Also

Disclosing information progressively