如果嵌套了ForEach循环,SwiftUI LazyHStack / LazyVStack仍然可以工作吗?

时间:2020-06-29 17:25:37

标签: swift swiftui

这是我的代码

LazyHStack(spacing: spacing) {
   InnerView(data: self.data) // The for loop is contained inside the InnerView
}

LazyHStack(spacing: spacing) {
   ForEach(data, id: \.self) { viewDataMap in
       buildView(viewDataMap: viewDataMap)
   }
}

两个代码段的“惰性”都起作用吗?

2 个答案:

答案 0 :(得分:1)

它有效,但预览在 Xcode 12.4 (12D4e) 上崩溃

已报告给反馈助理

<块引用>

FB9121009(如果 LazyVStack 包含两个嵌套的 ForEach 其中 Data.Element : Identifiable,则预览会崩溃)

import Foundation
import SwiftUI

struct NestedForEachInLazyVStack: View {

    var items1 = (0..<3).map { _ in Item() }
    var items2 = (0..<3).map { _ in Item() }

    @ViewBuilder
    var body: some View {
        if #available(iOS 14.0, *) {
            LazyVStack {
                ForEach(items1) { _ in
                    ForEach(items2) { _ in
                        Text("text")
                    }
                }
            }
        }
    }
}

struct Item: Identifiable {
    var id = UUID()
}

struct NestedForEachInLazyVStack_Previews: PreviewProvider {
    static var previews: some View {
        NestedForEachInLazyVStack()
    }
}

答案 1 :(得分:0)

是的,它应该可以按预期工作。仅当您拥有的项目多于屏幕显示的数量时,“惰性”属性才会生效。如果您认为屏幕上的项目数量适合您的屏幕,则使用惰性堆栈是没有意义的。