【发布时间】:2021-12-20 18:12:30
【问题描述】:
我尝试添加 Group {} 技巧以在 Table 视图中获取超过 10 个元素,但编译失败就像没有组的元素超过 10 个时一样。
var body: some View {
Table(viewModel.tableArrayOfStructs, sortOrder: $sortOrder) {
Group {
TableColumn("One", value: \.One).width(min: 35, ideal: 35, max: 60)
TableColumn("Two", value: \.Two).width(30)
TableColumn("Three", value: \.Three).width(50)
TableColumn("Four", value: \.Four).width(min: 150, ideal: 200, max: nil)
TableColumn("Five", value: \.Five).width(50)
TableColumn("Six", value: \.Six).width(min: 50, ideal: 55, max: nil)
TableColumn("Seven", value: \.Seven).width(88)
TableColumn("Eight", value: \.Eight).width(88)
TableColumn("Nine", value: \.Nine).width(20)
TableColumn("Ten", value: \.Ten).width(50)
}
TableColumn("Eleven", value: \.Eleven).width(50)
}
如果我将第 11+ 列也添加到新组中,我会遇到同样的问题。编译器报告:
The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
有没有什么方法可以让一个超过 10 列的表不下拉到 NSViewRepresentable?
【问题讨论】:
-
是的,您的 Group 解决方案还可以,但整体对于编译器来说太复杂了。尝试添加显式类型或使用较小的函数构建它。它不必是视图主体的一部分。主体可以调用返回这些子视图的 var 或 func。
-
谢谢。请注意,即使我删除了第 11 列,编译器仍然会对该组咳嗽,但如果我删除了该组并且只有 10 个项目就可以了。你有列变量的例子吗?我可以创建一个只返回 TableColumns 数组的函数吗?
-
尝试使用这些宽度。可能是导致问题的原因。没怎么用过 Table,但感觉很像第 1 版。第 2 版有望更加强大,提供更多功能。
-
尝试使用较小的组,例如 3 组,每组 4 人或其他。您还可以将组提取到变量中,这可以帮助编译器更快地找出类型。