首页 > 解决方案 > SwiftUI 中的 List 和 ForEach 有什么区别?

问题描述

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

标签: swiftui

解决方案


  • 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)
          }
      }
    

推荐阅读