SwiftUI中的List和ForEach有什么区别?

时间:2019-06-11 01:30:11

标签: swiftui

我知道SwiftUI目前不支持常规的for循环,而是提供一个名为ForEach的东西,但是它和List之间有什么区别?

3 个答案:

答案 0 :(得分:11)

  • ForEach是一个视图,使您可以将数据集合传递给其初始化程序,然后从您提供的闭包中创建多个“子视图”。关于如何排列视图,它没有任何语义。

    示例:

    ForEach(1...5) { row in
        Text("Row \(row)")
    }
    

    将创建等价的

    Text("Row 1")
    Text("Row 2")
    Text("Row 3")
    Text("Row 4")
    Text("Row 5")
    

    包装在单个容器视图中。

  • 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视图中使用List视图同时具有动态和静态内容–这是 SwiftUI 的一项非常强大的功能。

    < / p>

    示例3:

    List {
        Text("Food")
        ForEach(meals) { meal in
            Text(meal.name)
        }
        Text("Drinks")
        ForEach(drinks) { drink in
            Text(drink.name)
        }
    }
    

答案 1 :(得分:3)

List

  • 混合内容(也可以用于收藏)
  • 可滚动
  • 使用重复使用的单元格模式(高效)

ForEach

  • 仅适用于集合

List + ForEach =超级功能。例如,在这种情况下,ListForEach中的每个视图使用重用单元格模式。您也可以使用onMoveonDelete ...

答案 2 :(得分:1)

简单说明:

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