【发布时间】:2021-01-10 12:26:06
【问题描述】:
我有一个 EnvironmentObject 用于生成列表
class ActivityViewModel: ObservableObject {
@Published var Activities = [Activity]()
init() {
self.Activities = ActivityService.fetchActivities()
}
}
struct Activity: Codable {
var Id: UUID
var Name: String
var Records: [Record]
init(Name:String) {
self.Id = UUID.init()
self.Name = Name
self.Records = [Record]()
}
}
当我在视图中使用它时,我可以使用ForEach 来访问Activities 数组中的每个值。
我的问题是当我使用 NavigationLink 将此 Activity 传递给另一个视图时,它不是使用 EnvironmentObject
我的“父视图”代码:
ForEach(0..<activities.Activities.count, id: \.self) { activity in
HStack {
ActivityListItemView(activity: self.activities.Activities[activity])
}
}
我的孩子查看代码:
struct ActivityListItemView: View {
let activity: Activity
var body: some View {
NavigationLink(destination: ActivityDetail(Activity: activity)) {
HStack {
VStack {
HStack {
Text(activity.Name)
Text("\(activity.Records.count) records")
}
}
Text(">")
}
}
.buttonStyle(PlainButtonStyle())
}
}
如果我随后更新 viewModel,我需要将其复制到子视图中。但我不知道如何让它使用EnvironmentObject,而不仅仅是我传递给视图的变量。
任何帮助将不胜感激。
编辑:添加活动类型
【问题讨论】:
-
Activity是什么类型? -
离题,但属性名称应以小写字母开头。
-
刚刚编辑添加活动。
-
您需要对已发布数组的元素使用绑定(因为元素是值,所以如果直接传递则复制)。请参阅stackoverflow.com/a/59001742/12299030 中的场景示例。
-
谢谢,我现在去看看!
标签: swift swiftui swiftui-environment