---
title: "init(_:selection:sortOrder:columnCustomization:columns:)"
framework: swiftui
role: symbol
role_heading: Initializer
path: "swiftui/table/init(_:selection:sortorder:columncustomization:columns:)"
---

# init(_:selection:sortOrder:columnCustomization:columns:)

Creates a sortable table that computes its rows based on a collection of identifiable data, supports selecting multiple rows, and has dynamically customizable columns.

## Declaration

```swift
nonisolated init<Data, Sort>(_ data: Data, selection: Binding<Set<Value.ID>>, sortOrder: Binding<[Sort]>, columnCustomization: Binding<TableColumnCustomization<Value>>, @TableColumnBuilder<Value, Sort> columns: () -> Columns) where Rows == TableForEachContent<Data>, Data : RandomAccessCollection, Sort : SortComparator, Columns.TableRowValue == Data.Element, Data.Element == Sort.Compared
```

## Parameters

- `data`: The identifiable data for computing the table rows.
- `selection`: A binding to a set that identifies selected rows IDs.
- `sortOrder`: A binding to the ordered sorting of columns.
- `columnCustomization`: A binding to the state of columns.
- `columns`: The columns to display in the table.

## Discussion

Discussion Each column in the table that should participate in customization is required to have an identifier, specified with customizationID(_:).

## See Also

### Creating a table with customizable columns

- [init(_:columnCustomization:columns:)](swiftui/table/init(_:columncustomization:columns:).md)
- [init(_:selection:columnCustomization:columns:)](swiftui/table/init(_:selection:columncustomization:columns:).md)
- [init(_:sortOrder:columnCustomization:columns:)](swiftui/table/init(_:sortorder:columncustomization:columns:).md)
