Swiftui ObservedObject未接收变量中的更改

Swiftui ObservedObject未接收变量中的更改,swiftui,observedobject,Swiftui,Observedobject,我有一个已发布的变量,在调用函数时会发生变化。我在类中打印变量,我可以看到它已经设置了变量,但是当它没有改变我的视图时,当我打印变量时,它只打印我最初设置的变量 我知道在这方面也有一些类似的帖子,但在浏览完之后,我仍然不确定自己做错了什么 代码如下:(我认为负位在这里不相关) 类,该类包含调用以更改变量的函数 class MusicManager: NSObject, ObservableObject { @Published var playlistLabel: String = "

我有一个已发布的变量,在调用函数时会发生变化。我在类中打印变量,我可以看到它已经设置了变量,但是当它没有改变我的视图时,当我打印变量时,它只打印我最初设置的变量

我知道在这方面也有一些类似的帖子,但在浏览完之后,我仍然不确定自己做错了什么

代码如下:(我认为负位在这里不相关)

类,该类包含调用以更改变量的函数

class MusicManager: NSObject, ObservableObject {

    @Published var playlistLabel: String = "N/A"

    func playPlaylistNow(chosenPlaylist: String?) {
        ...
        playlistLabel = chosenPlaylist!
        print(playlistLabel) // I get the revised variable printed here 
    }
}
要更新的视图

struct HomeView: View {

    ...
    @ObservedObject var musicManager: MusicManager = MusicManager()

    var body: some View {
                ...
                SongLabels(trackLabel: currentTrack!, artistLabel: currentArtist!, playlistLabel: musicManager.playlistLabel)
                ...
            }
                ...
            .onAppear {
                self.updateTrackData()
        }
    }

    func updateTrackData() {
        print("Playlist: \(musicManager.playlistLabel)") // I get the original "N/A" printed here
    }
调用函数的视图:

{
    @State private var showingAlert = false
    let musicManager: MusicManager = MusicManager()
    var playlistName: String
    var body: some View {
        Button(action: {
            self.showingAlert = true
            self.musicManager.playPlaylistNext(chosenPlaylist: self.playlistName)
        }) {
            Text("Play Next")
        }
        .alert(isPresented: $showingAlert) {
            ...
        }
        ...
    }
}

您的应用程序中有多个
MusicManager
实例,因此它们不完全相同


如果要打印,可以同时打印
musicManager
,以查看差异。

从何处调用
PlayPlayNow
?从另一个称为TrackTable的视图调用。路径是主视图>按钮>播放列表>轨迹表是否有人更改播放列表标签?否。当在主视图中打印时,路径不变,当它传递到子视图时,路径不变,因为在主视图中有一个实例,在调用函数的视图中有一个实例?那我该怎么处理呢?我需要从用户从中选择音乐的视图调用函数,然后我需要更新HomeView上的标签。您需要在某个位置使用binding,或者使用相同的
MusicManager
的environmentObject。我添加了调用函数的视图,供您查看。我真的不确定绑定、环境对象和发布的语句应该放在哪里