swiftui - SwiftUI 中的 List 和 ForEach 有什么区别?
问题描述
我知道 SwiftUI 不支持当前常规的 for 循环,而是提供了一个名为 ForEach 的东西,但它和 List 有什么区别?
解决方案
ForEach
是一个视图,可让您将数据集合传递给其初始化程序,然后从您提供的闭包中创建多个“子视图”。它没有关于如何安排视图的任何语义。例子:
ForEach(1..<5) { row in Text("Row \(row)") }
将创建等效关闭
Text("Row 1") Text("Row 2") Text("Row 3") Text("Row 4")
包装在单个容器视图中。
List
是可以将多个视图组合在一起的视图,但不一定是同一类型的视图。您可以简单地添加多个视图而无需任何循环。示例 1:
List { Image("avatar") Text("Title") Button(action: { print("Button tapped!") }) { Text("Energize!") } }
为方便起见,
List
初始化程序允许您像ForEach
视图一样使用它,以防您想要一个仅包含单个单元格类型的列表。示例 2:
List(1..<5) { row in Text("Row \(row)") }
列表具有特殊的外观,具体取决于平台。例如,在 iOS 上,列表将显示为表格视图,并在其垂直堆叠的视图之间插入分隔线。
您可以在视图中使用
ForEach
视图来同时拥有动态和静态内容——这是SwiftUIList
的一个非常强大的功能。示例 3:
List { Text("Food") ForEach(meals) { meal in Text(meal.name) } Text("Drinks") ForEach(drinks) { drink in Text(drink.name) } }
推荐阅读
- javascript - 如何在 React Native 中渲染组件之前对从 firebase 接收的数据数组进行动态排序
- reactjs - 如何使用带有 jest 和 react-testing-library 的 authcontext 测试我的受保护路由
- cypress - 赛普拉斯:键入要记录的输入元素值(文本)
- c++ - 如何使用左手坐标系进行渲染?
- docker-for-windows - percona DB 在 Windows 上的 docker 上变得非常慢
- generics - 包含实现多个特征的泛型类型向量的 Rust 结构
- dns - 托管的 Gitlab CE 无法访问
- python - skimage.util.apply_parallel 未按预期运行
- python - 我的 Pytorch 卷积神经网络中的每个时期都应用了随机变换吗?(数据增强)
- c++ - fltk 从按钮将图像附加到窗口