macOS SwiftUI如何实现超10列Table,使用Group仍编译报错如何解决?
问题原因
Table的列构造闭包使用的是TableColumnBuilder而非普通的ViewBuilder,Group仅能解决ViewBuilder的10元素限制,对TableColumnBuilder无效。超过10个列直接写在闭包里会触发Swift类型推导的复杂度上限,出现编译超时报错。
可行解决方案
无需使用NSViewRepresentable,改用接收列数组的Table初始化方法即可绕过TableColumnBuilder的元素数量限制,具体实现如下:
- 先将所有列拆分定义为独立的数组计算属性,你可以按任意逻辑分组添加列,没有数量限制:
// 替换TableRowItem为你实际的行数据结构体类型 private var tableColumns: [TableColumn<TableRowItem, Never>] { var columns = [TableColumn<TableRowItem, Never>]() // 添加第一组列 columns.append(TableColumn("One", value: \.One).width(min: 35, ideal: 35, max: 60)) columns.append(TableColumn("Two", value: \.Two).width(30)) columns.append(TableColumn("Three", value: \.Three).width(50)) columns.append(TableColumn("Four", value: \.Four).width(min: 150, ideal: 200, max: nil)) columns.append(TableColumn("Five", value: \.Five).width(50)) columns.append(TableColumn("Six", value: \.Six).width(min: 50, ideal: 55, max: nil)) columns.append(TableColumn("Seven", value: \.Seven).width(88)) columns.append(TableColumn("Eight", value: \.Eight).width(88)) columns.append(TableColumn("Nine", value: \.Nine).width(20)) columns.append(TableColumn("Ten", value: \.Ten).width(50)) // 添加第11列及更多列 columns.append(TableColumn("Eleven", value: \.Eleven).width(50)) // 后续有更多列直接往数组里追加即可 return columns }
- 直接在body中使用接收列数组的Table初始化方法:
var body: some View { Table( viewModel.tableArrayOfStructs, sortOrder: $sortOrder, columns: tableColumns ) }
如果你的列对应的值类型不一致(比如有的是String,有的是Int),将数组类型声明为[any TableColumnContent<TableRowItem>]即可正常使用。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

