mvvm - SwiftUI:当我切换 Bool showAnswer 时,会显示所有问题的所有答案。我需要分别切换每个答案
问题描述
我无法独立切换每个问题的答案。我尝试将 Bool 添加到包含问题和答案的结构中,但错误表明 Bool 是不可变的。
https://github.com/williamallenmd/FlashCardTests
import SwiftUI
struct ItemsView: View {
@StateObject var vm = ItemViewModel()
@State private var showAnswer: Bool = false
var body: some View {
List(vm.items) { item in
VStack(alignment: .leading, spacing: 10) {
Button(item.question) {showAnswer.toggle()}
showAnswer ? Text(item.answer) : Text(" ")
}
}
.onAppear { vm.fetch()}
}
}
解决方案
你可以试试这个简单的方法,对我很有效:
使用这种方法,不需要每个项目都有自己的状态,也不需要带有键的变量数组,也不需要更改模型。
struct ItemsView: View {
@StateObject var vm = ItemViewModel()
@State private var showAnswer: Bool = false
@State private var selectedItem: ItemModel = ItemModel() // <--- here
var body: some View {
List(vm.items) { item in
VStack(alignment: .leading, spacing: 10) {
Button(item.question) {
selectedItem = item // <--- here
showAnswer = true
}
// --- here ---
if showAnswer && selectedItem.id == item.id {
Text(selectedItem.answer)
} else {
Text(" ")
}
}
}
.onAppear {
vm.fetch()
}
}
}
推荐阅读
- python - 绘制训练数据的分布
- jquery - 如何使用 ajax 从以“feed://”开头的 RSS 提要获取 XML 数据?
- numpy - 使用 serverless-python-requirements 为无服务器本机编译 python 库
- c++ - 二维字符串数组冒泡排序
- javascript - 异步函数停止处理并且无法仅在生产 aws ec2 集群上抛出 exc
- php - 为什么 Foreach 迭代的数组中的条目没有显示在页面上?
- c - 改变显示颜色的属性字节
- javascript - 重定向弹出窗口并发布消息
- perl - 使用 ExifTool 从两个文件(一个原始文件,一个 XMP)读取
- python - 如何在python中将字符串转换为字节?