What is the difference between List and ForEach in SwiftUI?

旧城冷巷雨未停 提交于 2021-02-06 14:21:38

问题


I know SwiftUI does not support currently regular for loops but instead provide something called ForEach but what is the difference between that and a List?


回答1:


  • ForEach is a view that lets you pass a collection of data to its initializer and then creates multiple "subviews" from the closure you provide. It doesn't have any semantics on how the views will be arranged.

    Example:

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

    will create the equivalent off

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

    wrapped in a single container view.

  • List is a view that can compose multiple views together, but not necessarily views of the same type. You can simply add multiple views without any loop.

    Example 1:

    List {
        Image("avatar")
        Text("Title")
        Button(action: {
            print("Button tapped!")
        }) {
            Text("Energize!")
        }
    }
    

    As a convenience, the List initializer allows you to use it just like the ForEach view in case you want to have a list consisting of a single cell type only.

    Example 2:

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

    A list has a special appearance, depending on the platform. For example, on iOS a list will appear as a table view and insert separator lines between its vertically stacked views.

    You can use ForEach views inside List views to have both dynamic and static content – a very powerful feature of SwiftUI.

    Example 3:

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



回答2:


List:

  • mixed content(also allows to work with collection)
  • scrollable
  • uses reusing cell pattern (efficient)

ForEach:

  • works only with a collection

List + ForEach = super feature. In this case, for example, List uses reusing cell pattern for every view from ForEach. Also you are able to use onMove, onDelete...



来源:https://stackoverflow.com/questions/56535326/what-is-the-difference-between-list-and-foreach-in-swiftui

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!