SwiftUI中List和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") 包装在单个容器视图中 列表是一个可以将多个视图组合在一起的视图,但不一定是同一类型的

我知道SwiftUI目前不支持常规for循环,而是提供了一种称为ForEach的东西,但这与列表有什么区别?

  • ForEach
    是一个视图,它允许您将数据集合传递给其初始值设定项,然后从您提供的闭包创建多个“子视图”。它没有任何关于视图如何排列的语义

    例子: 将创建等效的关闭

    Text("Row 1")
    Text("Row 2")
    Text("Row 3")
    Text("Row 4")
    Text("Row 5")
    
    包装在单个容器视图中

  • 列表
    是一个可以将多个视图组合在一起的视图,但不一定是同一类型的视图。您可以简单地添加多个视图,而无需任何循环

    例1: 为了方便起见,
    列表
    初始值设定项允许您像使用
    ForEach
    视图一样使用它,以防您希望列表只包含单个单元格类型。

    例2: 列表具有特殊外观,具体取决于平台。例如,在iOS上,列表将显示为表视图,并在其垂直堆叠视图之间插入分隔线

    您可以在
    List
    视图中使用
    ForEach
    视图来同时包含动态和静态内容,这是SwiftUI非常强大的功能。

    例3:
列表

  • 混合内容(也允许使用集合)
  • 可滚动
  • 使用重用单元模式(高效)
ForEach的:

  • 仅适用于集合

List
+
ForEach
=超级功能。例如,在这种情况下,
List
对来自
ForEach
的每个视图使用重用单元模式。您还可以使用
onMove
onDelete

简单解释:

  • 列表的行为类似于UIScrollView(任意长的可滚动视图 (意见)
  • ForEach的行为有点像一个UITableView(其中每个元素都有一个单元格视图,并且可以滚动)

也许这篇文章能帮你解决这个问题。ForEach和List都是容器。回答得不错。一些调整:1。您不需要大多数
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)
    }
}