如何解决添加 LazyVGrid 后预览崩溃
我正在学习斯坦福 cs193p,一切都很顺利,直到用 HStack 切换 LazyVGrid。
我和一位教授检查了我的代码,他们是一样的。但我的代码令人困惑的部分是,当我的 emojiCount = 4 时,预览效果很好,我可以使用 LazyVGrid,但是当我将 emojiCount 值更改为 4 以上时,例如 5 或 24,它会立即崩溃。
崩溃信息是这样的:
这是我的代码:
import SwiftUI
struct ContentView: View {
var emojis = ["?","?","?"]
@State var emojiCount = 4
var body: some View {
vstack {
LazyVGrid(columns:[GridItem(),GridItem(),GridItem()]) {
ForEach(emojis[0..<emojiCount],id: \.self) { emoji in
CardView(content: emoji)
}
}
.foregroundColor(.red)
Spacer()
HStack {
remove
Spacer()
add
}
.font(.largeTitle)
.padding(.horizontal)
}
.padding(.horizontal)
}
var remove: some View {
Button {
if emojiCount > 2 {
emojiCount -= 1
}
} label: {
Image(systemName:"minus.circle")
}
}
var add: some View {
Button {
if emojiCount < emojis.count {
emojiCount += 1
}
} label: {
Image(systemName:"plus.circle")
}
}
}
struct CardView: View {
var content: String
@State var isFaceUp: Bool = true
var body: some View {
ZStack {
let shape = RoundedRectangle(cornerRadius: 20)
if isFaceUp {
shape.fill().foregroundColor(.white)
shape.stroke(linewidth: 3)
Text(content).font(.largeTitle)
} else {
shape.fill()
}
}
.onTapGesture {
isFaceUp = !isFaceUp
}
}
}
我整晚都在试图弄清楚,但我仍然不知道我的代码有什么问题。非常感谢!
解决方法
在模拟器中运行代码,你会看到错误
致命错误:每个布局项只能出现一次
这导致了表情符号。你有很多,但只有 4 种不同的类型。
在项目由 \.self
引用的循环中,您有责任确保项目是唯一的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。