SwiftUI-列表不';当我将数据从视图传输到另一视图时,不会更新

SwiftUI-列表不';当我将数据从视图传输到另一视图时,不会更新,swift,xcode,swiftui,swiftui-navigationlink,Swift,Xcode,Swiftui,Swiftui Navigationlink,我正在尝试将数据从FirstView发送到名为myMoodList的结构中的列表。 我的问题是,一旦数据发送到myMoodList,它就不会添加到列表中。 所以我在navigationBar中添加了虚拟按钮,以便添加包含数据的行 这是我的密码 var body: some View { NavigationView{ VStack{ Text(currentMood) } }.navigationBarItems(trailing: Na

我正在尝试将数据从FirstView发送到名为myMoodList的结构中的列表。 我的问题是,一旦数据发送到myMoodList,它就不会添加到列表中。 所以我在navigationBar中添加了虚拟按钮,以便添加包含数据的行

这是我的密码

var body: some View {
    NavigationView{
        VStack{
            Text(currentMood)

}
    }.navigationBarItems(trailing: NavigationLink(destination:MyMoodList(currentMood: currentMood)) {
        Text("Next")
    }
    ).navigationBarTitle("Mood People", displayMode: .inline)
}
所以当前情绪是字符串,它的值是“快乐”

这是我的主要观点

struct moodStructure: Identifiable,Decodable {

let id = UUID()
let myMood: String
}

class MoodViewModel: ObservableObject {
@Published var moodStatus = "Test on MoodObjectModel"
@Published var moodArray: [moodStructure] = [
    .init(myMood: "Happy"),
    .init(myMood: "Sad")
]
func addItem(moodStatus: String) {
    moodArray.append(moodStructure(myMood: moodStatus))
    print(moodArray.capacity)
}
func didChange() {
    self.moodStatus = "Test inside did change"
}
}


 struct MyMoodList: View {


@ObservedObject var moodVM = MoodViewModel()
@State var currentMood: String

var body: some View {

    NavigationView {
        List() {
            ForEach(moodVM.moodArray,id: \.myMood) { item in

                HStack {
                    VStack {
                        Text(item.myMood)
                        Text("Feb/3/2020")
                            .font(.callout)
                    }
                    Spacer()
                    Text(">")
                        .fontWeight(.semibold)
                }
            }

        }.navigationBarTitle("Tracker")
            .listStyle(GroupedListStyle())
            .navigationBarItems(trailing: Button(action: {
                self.moodVM.addItem(moodStatus: self.currentMood)
            }) {
                Image(systemName: "plus")
            })
    }
}}
所以MyMoodList结构有navigationBarButton,我设置它只是为了确保数据已经成功地从第一个视图发送到MyMoodList。 但我想要的是,一旦用户从firstView移动到MyMoodList,它就会自动添加到列表中。我不想使用该按钮,以便将其添加到列表中

我不知道列表是否不会自动更新,或者在项目添加到moodArray类MoodViewModel中之前先加载列表

多谢各位

更新:

依我看,我有

.navigationBarItems(trailing: NavigationLink(destination:MyMoodList(currentMood: currentMood, addNewPost: true))
关于MyMoodList类 我添加了
@State var addNewPost:Bool

.onAppear() {
        if self.addNewPost == true {
            self.moodVM.addItem(moodStatus: self.currentMood)
            self.addNewPost = false
        } else {
            print("Nothing !!")
        }
    }

MyMoodList
结构的
NavigationView
上使用.code>onAppear修饰符将字符串添加到数组中

struct ContentView: View {
var currentMood = "Happy1"
var body: some View {
    NavigationView {
        VStack{
            Text(currentMood)

            NavigationLink(destination:MyMoodList(currentMood: currentMood)) {
                Text("Next")
            }
        }
        .navigationBarTitle("Mood People", displayMode: .inline)
    }
}}

struct moodStructure: Identifiable,Decodable {
  let id = UUID()
  let myMood: String
}

class MoodViewModel: ObservableObject {
    @Published var moodStatus = "Test on MoodObjectModel"
    @Published var moodArray: [moodStructure] = [
        .init(myMood: "Happy"),
        .init(myMood: "Sad")
    ]
    func addItem(moodStatus: String) {
        moodArray.append(moodStructure(myMood: moodStatus))
        print(moodArray.capacity)
    }
    func didChange() {
        self.moodStatus = "Test inside did change"
    }
  }

struct MyMoodList: View {

@ObservedObject var moodVM = MoodViewModel()
var currentMood: String

var body: some View {

    NavigationView {
        List() {
            ForEach(moodVM.moodArray,id: \.myMood) { item in

                HStack {
                    VStack {
                        Text(item.myMood)
                        Text("Feb/3/2020")
                            .font(.callout)
                    }
                    Spacer()
                    Text(">")
                        .fontWeight(.semibold)
                }
            }

        }.navigationBarTitle("Tracker")
            .listStyle(GroupedListStyle())
            .navigationBarItems(trailing: Button(action: {
                self.moodVM.addItem(moodStatus: self.currentMood)
            }) {
                Image(systemName: "plus")
            })
    }
    .onAppear {
        if !self.moodVM.contains(self.currentMood) {
        self.moodVM.addItem(moodStatus: self.currentMood)
        }
    }
}}

MyMoodList
结构的
NavigationView
上使用.code>onAppear修饰符将字符串添加到数组中

struct ContentView: View {
var currentMood = "Happy1"
var body: some View {
    NavigationView {
        VStack{
            Text(currentMood)

            NavigationLink(destination:MyMoodList(currentMood: currentMood)) {
                Text("Next")
            }
        }
        .navigationBarTitle("Mood People", displayMode: .inline)
    }
}}

struct moodStructure: Identifiable,Decodable {
  let id = UUID()
  let myMood: String
}

class MoodViewModel: ObservableObject {
    @Published var moodStatus = "Test on MoodObjectModel"
    @Published var moodArray: [moodStructure] = [
        .init(myMood: "Happy"),
        .init(myMood: "Sad")
    ]
    func addItem(moodStatus: String) {
        moodArray.append(moodStructure(myMood: moodStatus))
        print(moodArray.capacity)
    }
    func didChange() {
        self.moodStatus = "Test inside did change"
    }
  }

struct MyMoodList: View {

@ObservedObject var moodVM = MoodViewModel()
var currentMood: String

var body: some View {

    NavigationView {
        List() {
            ForEach(moodVM.moodArray,id: \.myMood) { item in

                HStack {
                    VStack {
                        Text(item.myMood)
                        Text("Feb/3/2020")
                            .font(.callout)
                    }
                    Spacer()
                    Text(">")
                        .fontWeight(.semibold)
                }
            }

        }.navigationBarTitle("Tracker")
            .listStyle(GroupedListStyle())
            .navigationBarItems(trailing: Button(action: {
                self.moodVM.addItem(moodStatus: self.currentMood)
            }) {
                Image(systemName: "plus")
            })
    }
    .onAppear {
        if !self.moodVM.contains(self.currentMood) {
        self.moodVM.addItem(moodStatus: self.currentMood)
        }
    }
}}

我要修改整个答案。检查新答案。非常感谢,我会检查并让你知道。每次我打开我的情绪列表,它都会添加新的一行。所以我更新了我的问题。你认为它现在有效吗?在这种情况下,你可以检查数组是否有元素。检查我对数组使用的更新答案
包含的
。不需要新的
状态变量进行检查。我将修改整个答案。检查新答案非常感谢,我会检查并让您知道。每次打开我的MoodList,它都会添加新行。所以我更新了我的问题。你认为它现在有效吗?在这种情况下,你可以检查数组是否有元素。检查我对数组使用的更新答案
包含的
。无需新的
状态变量进行检查。