Table
Skip support for SwiftUI.Table ↗.
The following example screens and source code is from SkipUI’s
Showcase sample app
TablePlayground.swift ↗
import SwiftUI
enum TablePlaygroundType: String, CaseIterable { case defaultColumns case fixedWidthColumns case rangeWidthColumns case selection case selectionSet
var title: String { switch self { case .defaultColumns: return "Default Columns" case .fixedWidthColumns: return "Fixed Width Columns" case .rangeWidthColumns: return "Range Width Columns" case .selection: return "Selection" case .selectionSet: return "Selection Set" } }}
struct TablePlayground: View { var body: some View { List(TablePlaygroundType.allCases, id: \.self) { type in NavigationLink(type.title, value: type) } .toolbar { PlaygroundSourceLink(file: "TablePlayground.swift") } .navigationDestination(for: TablePlaygroundType.self) { switch $0 { case .defaultColumns: DefaultColumnsTablePlayground() .navigationTitle($0.title) case .fixedWidthColumns: FixedWidthColumnsTablePlayground() .navigationTitle($0.title) case .rangeWidthColumns: RangeWidthColumnsTablePlayground() .navigationTitle($0.title) case .selection: SelectionTablePlayground() .navigationTitle($0.title) case .selectionSet: SelectionSetTablePlayground() .navigationTitle($0.title) } } }}
private struct TableData: Identifiable { let id = UUID() let name: String let value: Int
static var initialData: [TableData] { return (1...20).map { TableData(name: "Item \($0)", value: $0) } }}
private struct DefaultColumnsTablePlayground: View { @State var data = TableData.initialData
var body: some View { Table(data) { TableColumn("UUID", content: { data in // SKIP NOWARN Text(String(data.id.uuidString.prefix(8))) }) TableColumn("Name", value: \.name) TableColumn("Value", content: { data in Text("\(data.value)") }) } }}
private struct FixedWidthColumnsTablePlayground: View { @State var data = TableData.initialData
var body: some View { Table(data) { TableColumn("UUID", content: { data in // SKIP NOWARN Text(String(data.id.uuidString.prefix(8))) }) .width(100) TableColumn("Name", value: \.name) .width(100) TableColumn("Value", content: { data in Text("\(data.value)") }) } }}
private struct RangeWidthColumnsTablePlayground: View { @State var data = TableData.initialData
var body: some View { Table(data) { TableColumn("UUID", content: { data in // SKIP NOWARN Text(String(data.id.uuidString.prefix(8))) }) .width(min: 100, max: 200) TableColumn("Name", value: \.name) .width(ideal: 100) TableColumn("Value", content: { data in Text("\(data.value)") }) } }}
private struct SelectionTablePlayground: View { @State var data = TableData.initialData @State var selection: UUID?
var body: some View { Table(data, selection: $selection) { TableColumn("UUID", content: { data in // SKIP NOWARN Text(String(data.id.uuidString.prefix(8))) }) TableColumn("Name", value: \.name) TableColumn("Value", content: { data in Text("\(data.value)") }) } }}
private struct SelectionSetTablePlayground: View { @State var data = TableData.initialData @State var selection: Set<UUID> = []
var body: some View { Table(data, selection: $selection) { TableColumn("UUID", content: { data in // SKIP NOWARN Text(String(data.id.uuidString.prefix(8))) }) TableColumn("Name", value: \.name) TableColumn("Value", content: { data in Text("\(data.value)") }) } }}