如何使我的 SwiftUI 网格视图正常工作?

Posted

技术标签:

【中文标题】如何使我的 SwiftUI 网格视图正常工作?【英文标题】:How can I make my SwiftUI grid view work? 【发布时间】:2020-02-21 13:09:16 【问题描述】:

我正在尝试在 SwiftUI 中创建一个网格视图,由不同数量的视图元素组成。我用这个线程作为方向:UICollectionView and SwiftUI?

我有一个包含我的元素的集合,分成每个 3 个的 sn-ps:

let test = allTheRewards.filter( !$0.completed ).chunked(into: 3)

然后,在我的“母亲视图”中,我像这样遍历它们以将数据传递给子视图元素:

VStack 

                            ForEach(self.test.indices, id:\.self)  idx in

                                HStack 

                                    ForEach(self.test[idx].indices, id:\.self)  index in

                                        HStack 


                                            TestReward(name: self.test[idx][index].name, description: self.test[idx][index].description, shape: self.test[idx][index].shape, bgStart: self.test[idx][index].bgStart, bgEnd: self.test[idx][index].bgEnd, isComplete: self.test[idx][index].completed)


                                        

                                    

                                

                            

                        

这里的问题是编译器似乎不喜欢索引 ([idx][index]) 的那么多用途。

编译器无法合理地对该表达式进行类型检查 时间;尝试将表达式分解为不同的子表达式

当我在调用中只使用它几次来传递我的参数时它工作正常,但它不适用于当前的 6 次。编译时间增加很多,最终失败。所以我认为这可能是一种非常低效的方法。但我不知道什么是更好的解决方案。有什么想法吗?

更多信息: 在单独的元素中使用索引的数量是没有问题的,像这样:

Text("\(self.uncompletedRewards[idx][index].name)")
Text("\(self.uncompletedRewards[idx][index].description)")
Text("\(self.uncompletedRewards[idx][index].shape)")
Text("\(String(describing: (self.uncompletedRewards[idx][index].bgStart)))")
Text("\(String(describing: (self.uncompletedRewards[idx][index].bgEnd)))")
Text("\(String(self.uncompletedRewards[idx][index].completed))")

我似乎无法将这一切都放在一个电话中......

【问题讨论】:

【参考方案1】:
TestReward(model: model, row: row, column: column)

TestReward(row: row, column: column).environmentObject(model)

应该可以解决您的问题并显着提高代码库的可读性(以及下次维护)。

【讨论】:

谢谢!我实际上创建了一个辅助函数来将数据传递给视图。它也可以工作并且速度非常快。但我不知道是否应该这样做......

以上是关于如何使我的 SwiftUI 网格视图正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中自定义网格视图的额外不必要渲染问题

无法点击 SwiftUI 网格图像以显示 DetailView

Kendo网格过滤无法正常工作

剑道网格弹出显示

SwiftUI 动画如何与子视图隔离?

如何使我的自定义 ViewModifier 仅适用于 SwiftUI 中符合(可识别和视图)的内容/视图?