【发布时间】:2022-02-05 19:13:05
【问题描述】:
我正在尝试实现一个 VStack 网格,当 ForEach 循环中的下一个项目满足条件时,该网格需要一个 HStack。我有下面的代码显示数组中的项目,但我不知道如何获取下一个要检查的项目。
这是我目前所拥有的。
VStack {
ForEach(item.cards, id: \.self) { item in
switch item.card.size {
case .Large:
LargeCard(card: item.card, viewModel: CardViewModel())
case .Medium:
MediumCard(card: item.card, viewModel: CardViewModel())
case .Small:
HStack(spacing: 16) {
SmallCard(card: item.card, viewModel: CardViewModel())
// This is where I think I need to check and I tried somthing like below, but the compiler crashes
if $0 + 1 < item.cards.count {
if item.card.size == .Small {
SmallCard(card: item.card, viewModel: CardViewModel())
}
}
}
case .none:
Text("No more.")
}
}
}
这是项目结构:
struct Item: Decodable, Hashable {
let card: Card
}
这就是我想要的。
【问题讨论】:
-
您可以使用
.enumerated来拥有和项目和索引,因此可以根据需要使用索引(例如,从容器中访问下一个项目)。接下来可能会有所帮助stackoverflow.com/a/59863409/12299030。 -
这能回答你的问题吗? Get index in ForEach in SwiftUI
-
我已经尝试了这两种方法,导致应用程序无法构建而没有任何构建错误,或者编译器只是挂起。如果我注释掉 HStack 中的 if 语句,应用程序就会构建。您可以在 forEach 中的 HStack 中执行 if 块??
-
你能显示项目的代码吗?它有
id属性吗? -
它没有 ID,但它是一个简单的结构。添加到上面