【发布时间】:2019-12-17 18:11:25
【问题描述】:
我在一个类中有一个变量(一个描述游戏的标签),我需要在我的视图之间传递它,我通过@EnvironmentObject 状态来完成。当更改该标签的函数(与变量在同一类中)被一个视图调用时,该变量会在其他视图中更新。但是,当触发通知时,AppDelegate 也会调用该函数。目前,我已经将包含标签的类声明为 AppDelegate 中的新实例,这不会导致视图/结构中的变量发生任何更改。
是否可以让 AppDeleagte 访问环境对象(例如,通过 AppDelegate().environmentobject(myClass),如果可以,在哪里?)还是有更好的方法来做到这一点?
简化代码:
包含播放列表标签的类以及更改播放列表和标签的功能
class MusicManager: NSObject, ObservableObject {
var playlistLabel: String = ""
func playPlaylistNow(chosenPlaylist: String?) {
playlistLabel = "Playlist: \(chosenPlaylist!)"
}
}
显示标签的主视图
struct HomeView: View {
@EnvironmentObject var musicManager: MusicManager
var body: some View {
Text(musicManager.playlistLabel)
}
}
AppDelegate
class AppDelegate: UIResponder, UIApplicationDelegate, AVAudioPlayerDelegate {
var musicManager: MusicManager = MusicManager()
func application(_ application: UIApplication, didReceive notification: UILocalNotification) {
var playlistName: String = ""
if let userInfo = notification.userInfo {
playlistName = userInfo["soundName"] as! String
}
musicPlayerManager.playPlaylist(chosenPlaylist: playlistName)
}
}
【问题讨论】:
标签: swift swiftui appdelegate