foreach - 如何使我的 SwiftUI 网格视图正常工作?
问题描述
我正在尝试在 SwiftUI 中创建一个网格视图,由不同数量的视图元素组成。我将此线程用作方向:UICollectionView 和 SwiftUI?
我有一个包含我的元素的集合,每个元素分成 3 个片段:
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))")
我似乎无法将这一切都放在一个电话中......
解决方案
TestReward(model: model, row: row, column: column)
或者
TestReward(row: row, column: column).environmentObject(model)
应该可以解决您的问题并显着提高代码库的可读性(以及下一次维护)。
推荐阅读
- functional-programming - Isabelle 中的 Map 和 Mapping 有什么区别?
- python - discord.py pymongo // pymongo.errors.OperationFailure: bad auth : Authentication failed // 错误代码 8000
- python - 在堆栈栏中python plotly获取相同的数据顺序
- java - 我希望在第一个组合框中选择的城市不会出现在第二个组合框中
- c# - 在 C# .net 核心中使用多个身份验证提供程序
- python - 如果 xml 元素名称不存在,Python 继续
- javascript - 拼接数组去除力有向图中的错误节点
- mysql - 使用条件mysql合并多个数据
- python - pandas groupby 可以将该分组元素实现到一个数组存储桶吗?
- vba - 另存为 PDF 和移动电子邮件会导致空白 PDF