这是我的代码
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)
}
}
两个代码段的“惰性”都起作用吗?
答案 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)
是的,它应该可以按预期工作。仅当您拥有的项目多于屏幕显示的数量时,“惰性”属性才会生效。如果您认为屏幕上的项目数量适合您的屏幕,则使用惰性堆栈是没有意义的。