---
title: "init(_:id:children:rowContent:)"
framework: swiftui
role: symbol
role_heading: Initializer
path: "swiftui/list/init(_:id:children:rowcontent:)"
---

# init(_:id:children:rowContent:)

Creates a hierarchical list that identifies its rows based on a key path to the identifier of the underlying data.

## Declaration

```swift
nonisolated init<Data, ID, RowContent>(_ data: Binding<Data>, id: KeyPath<Data.Element, ID>, children: WritableKeyPath<Data.Element, Data?>, @ContentBuilder rowContent: @escaping (Binding<Data.Element>) -> RowContent) where Content == OutlineGroup<Binding<Data>, ID, RowContent, RowContent, DisclosureGroup<RowContent, OutlineSubgroupChildren>>, Data : MutableCollection, Data : RandomAccessCollection, ID : Hashable, RowContent : View
```

## Parameters

- `data`: The data for populating the list.
- `id`: The key path to the data model’s identifier.
- `children`: A key path to a property whose non-nil value gives the children of data. A non-nil but empty value denotes a node capable of having children that is currently childless, such as an empty directory in a file system. On the other hand, if the property at the key path is nil, then data is treated as a leaf node in the tree, like a regular file in a file system.
- `rowContent`: A content builder that creates the view for a single row of the list.

## See Also

### Creating a list from hierarchical data

- [init(_:children:rowContent:)](swiftui/list/init(_:children:rowcontent:).md)
- [init(_:children:selection:rowContent:)](swiftui/list/init(_:children:selection:rowcontent:).md)
- [init(_:id:children:selection:rowContent:)](swiftui/list/init(_:id:children:selection:rowcontent:).md)
