Skip Fuse is now free for indie developers!
skip.tools logo

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)")
 })
 }
 }
}

AltStyle によって変換されたページ (->オリジナル) /