【发布时间】:2021-08-15 17:29:36
【问题描述】:
我想用从 LocationManager 传入的数据更新我的 ChallengeManager 类的 Published 属性。 以下是相关位的简化代码:
位置管理器
final class LocationManager: NSObject, ObservableObject {
var challengeManager = ChallengeManager()
...
//a func called from locationManager delegate converts the region to an instance of an Area object then calls a method on the ChallengeManager class like this:
challengeManager.loadChallenge(for: activeArea)
...
挑战经理
final class ChallengeManager: ObservableObject {
@Published var isShowingChallenge = false
@Published var challengeToDisplay: Challenge?
func loadChallenge(for area: Area) {
if let challenge = area.challenge { //gets challenge property of area object
self.challengeToDisplay = challenge
self.isShowingChallenge = true
}
}
最后是 ContentView:
struct ContentView: View {
@ObservedObject var challengeManager = ChallengeManager()
...
(老实说,我可以通过在视图中为 LocationManager 添加一个 ObservedObject 然后将值传递到那里的函数中来获得我想要的结果。但我不喜欢这样做的想法多个视图。而且我还希望 loadChallenge() 做更多繁重的工作。在我看来,它应该是唯一的事实来源。不是吗?)
问题:
如果我尝试访问 ContentView 中的 challengeManager.challengeToDisplay,则该值始终为 nil。
loadChallenge() 函数中的打印语句告诉我来自 locationManager 的值被正确接收。但是@Published var challengeToDisplay 没有改变。
有人可以告诉我我做错了什么吗?
谢谢!
【问题讨论】: