У меня есть StateObject, который инициализируется, он содержит массив «Activity», который сам содержит имя свойства, содержащее строку. Когда я повторяю массив в forEach, я пытаюсь изменить имя Activity в другом представлении, но это изменение не отображается в списке. Вот код:
struct ContentView: View {
@StateObject var store = ActivityStore()
@State var showAdd = false
var body: some View {
NavigationView {
VStack {
if store.Activities.isEmpty {
Text("Please Add an Activity")
} else {
List {
Section(header: Text("Activities: ") ) {
ForEach(store.Activities) { activity in
NavigationLink( destination: DetailView(activity: activity))
{
Text(verbatim: activity.name)
}
}
}
}
}
}
.navigationTitle("ITrack")
.navigationBarItems(trailing: Button(action: { showAdd = true }) {
Text("Add")
})
.sheet(isPresented: $showAdd) {
AddView(store: store)
}
}
}
}
struct DetailView: View {
@Binding var activity: Activity
var body: some View {
VStack {
TextField("name", text: $activity.name )
Text(activity.description)
}
}
}
struct Activity: Identifiable {
var id = UUID()
var name: String
var description: String
var log: [String] = []
init(name: String, description: String) {
self.name = name
self.description = description
}
}
class ActivityStore: ObservableObject {
@Published var Activities: [Activity] = []
func demo() -> [Activity] {
let activities: [Activity] = []
Activities.append(Activity(name: "br1", description: "br111111"))
Activities.append(Activity(name: "br2", description: "br222222"))
Activities.append(Activity(name: "br3", description: "br333333"))
Activities.append(Activity(name: "br4", description: "br444444"))
return activities
}
}