Naz*_*san 1 foreach swift swiftui lazyvgrid
我正在开发多项选择答案测验应用程序。
var itemsTemp = ["ant","bat", "bear", "bee", "bird", "butterfly", "camel", "cat", "cheetah","chick", "chicken"]
Run Code Online (Sandbox Code Playgroud)
更新了 这里是我的测验应用程序的示例。
let answerIndex = Int.random(in: 0...3) // for correct answer
itemsTemp!.shuffle() // to multiple choose option change.
Run Code Online (Sandbox Code Playgroud)
这是错误:
线程 1:致命错误:每个布局项只能出现一次
波纹管代码崩溃
LazyVGrid(columns: [GridItem(),GridItem()],spacing: 16) {
ForEach(itemsTemp) { item in
VStack {
Text(item).id(UUID())
.matchedGeometryEffect(id:UUID(), in: namespace, isSource: !show)
.onTapGesture{
print(" tapped!")
}
}.matchedGeometryEffect(id: "container\(UUID())", in: namespace)
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个测验应用程序,因此可以选择多个选项来选择正确的答案。数组项将在每个循环中多次出现。
所以需要每个布局项多次出现。
为唯一标识符。使用模型数组而不是字符串数组。
首先,创建一个模型。
struct Item: Identifiable {
var id = UUID()
var name: String
}
Run Code Online (Sandbox Code Playgroud)
那么,你的数组是
var itemsTemp: [Item] = [
.init(name: "ant"),
.init(name: "bat"),
.init(name: "ant"),
.init(name: "bear"),
.init(name: "bee"),
.init(name: "ant"),
.init(name: "butterfly"),
.init(name: "bear")
]
Run Code Online (Sandbox Code Playgroud)
现在,你的循环是
//Other Code
ForEach(itemsTemp, id:\.id) { item in
//Other Code
}
//Other Code
Run Code Online (Sandbox Code Playgroud)
第二种方法是使用.indices.
//Other Code
ForEach(itemsTemp.indices) { index in
let item = temsTemp[index]
//Other Code
}
//Other Code
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2351 次 |
| 最近记录: |