view - 将对象传递给另一个视图并在 SwiftUI 中更改其值
问题描述
我对以下任务有疑问。我有一个由 Activity 创建的结构和一个由 Activity 对象组成的类。
struct Activity: Identifiable, Codable {
var id = UUID()
let name: String
let description: String
var amount: Int
}
class Activities: ObservableObject {
@Published var activities = [Activity]() {
}
在我的主视图中,我有一个这些活动的列表,使用 NavigationLink 我们可以转到每个活动并查看描述和我们执行的次数。
struct ContentView: View {
@ObservedObject var activities = Activities()
var body: some View {
NavigationView {
List {
ForEach(activities.activities, content: { activity in
NavigationLink(
destination: ActivityView(activity: activity),
label: {
VStack(alignment: .leading) {
Text(activity.name)
.font(.headline)
Text("\(activity.amount)")
}
})
})
}
}
}
}
我的问题是,在这个详细视图中,我希望能够增加我们执行活动的次数,但我收到一个错误:变异运算符的左侧不可变:“自我”是不可变的
struct ActivityView: View {
var activity: Activity
var body: some View {
Text(activity.name)
Text(activity.description)
Text("\(activity.amount)")
Button(action: {
print(activity.amount)
self.activity.amount += 1
}, label: {
Text("Button")
})
}
}
谁能帮我这个?
解决方案
您可以为此使用绑定
struct ActivityView: View {
@Binding var activity: Activity
...
并更新父级以传递绑定值
ForEach(Array(activities.activities.enumerated()), id: \.1, content: { i, activity in
NavigationLink(
destination: ActivityView(activity: self.$activities[i]),
推荐阅读
- google-signin - pythonanywhere的Flask-dance Google oauth设置问题
- postgresql - Psycopg2 / PostgreSQL 中的硬编码和冗余代码?
- python - 无法让二进制代码在循环中复制
- python - discord.py 在 cogs 中使用 JSON 吗?
- linux - 在哪里安装没有选项和硬编码值的共享库及其头文件
- apache - nginx proxy_pass 未按预期方式工作
- android - 如何使用 FVM 打开和构建以前版本的 Flutter App
- .net - 结构元素和结构成员之间的区别
- autocomplete - 我可以在 Wolfram Mathematica 中禁用变量名称自动完成建议吗?
- r - 用于按列计算 R 数据帧中位数的函数,该 R 数据帧定期对多个数据帧执行