SwiftUI中List和ForEach的区别是什么?
我知道SwiftUI目前不支持常规for循环,而是提供了一种称为ForEach的东西,但这与列表有什么区别?SwiftUI中List和ForEach的区别是什么?,swiftui,Swiftui,我知道SwiftUI目前不支持常规for循环,而是提供了一种称为ForEach的东西,但这与列表有什么区别? ForEach是一个视图,它允许您将数据集合传递给其初始值设定项,然后从您提供的闭包创建多个“子视图”。它没有任何关于视图如何排列的语义 例子: 将创建等效的关闭 Text("Row 1") Text("Row 2") Text("Row 3") Text("Row 4") Text("Row 5") 包装在单个容器视图中 列表是一个可以将多个视图组合在一起的视图,但不一定是同一类型的
是一个视图,它允许您将数据集合传递给其初始值设定项,然后从您提供的闭包创建多个“子视图”。它没有任何关于视图如何排列的语义 例子: 将创建等效的关闭ForEach
包装在单个容器视图中Text("Row 1") Text("Row 2") Text("Row 3") Text("Row 4") Text("Row 5")
是一个可以将多个视图组合在一起的视图,但不一定是同一类型的视图。您可以简单地添加多个视图,而无需任何循环 例1: 为了方便起见,列表
初始值设定项允许您像使用列表
视图一样使用它,以防您希望列表只包含单个单元格类型。ForEach
例2: 列表具有特殊外观,具体取决于平台。例如,在iOS上,列表将显示为表视图,并在其垂直堆叠视图之间插入分隔线 您可以在
视图中使用List
视图来同时包含动态和静态内容,这是SwiftUI非常强大的功能。ForEach
例3:
列表
:
- 混合内容(也允许使用集合)
- 可滚动
- 使用重用单元模式(高效)
- 仅适用于集合
List
+ForEach
=超级功能。例如,在这种情况下,List
对来自ForEach
的每个视图使用重用单元模式。您还可以使用onMove
,onDelete
。简单解释:
- 列表的行为类似于UIScrollView(任意长的可滚动视图 (意见)
- ForEach的行为有点像一个UITableView(其中每个元素都有一个单元格视图,并且可以滚动)
return
s(,yo)。如果您只是将字符串传递到文本(…)
中,则无需将其包装为字符串插值-SwiftUI会自动使编程字符串非本地化,并本地化文本和插值。感谢您的提示。相应地更新了我的答案。看起来好多了!你能详细介绍一下演出吗?哪一个对细胞的再利用更好?对于连续馈送类型的数据集,哪一种应该是首选的?我(遗憾地)意识到ForEach(没有列表)无法管理插入、更新和删除动画。当然,您可以向行中添加动画和过渡修改器,但遗憾的是,当您仅更新行时,它们也会被触发(这会导致在您仅更新一个索引处的文本时插入动画)。在列表中,这也会作为“新行”(onAppear()被触发)触发,但列表本身会设法抑制动画。。。
Text("Row 1")
Text("Row 2")
Text("Row 3")
Text("Row 4")
Text("Row 5")
List {
Image("avatar")
Text("Title")
Button(action: {
print("Button tapped!")
}) {
Text("Energize!")
}
}
List(1...5) { row in
Text("Row \(row)")
}
List {
Text("Food")
ForEach(meals) { meal in
Text(meal.name)
}
Text("Drinks")
ForEach(drinks) { drink in
Text(drink.name)
}
}