声明后不可访问的可观察对象中的变量(SwiftUI)
Posted
技术标签:
【中文标题】声明后不可访问的可观察对象中的变量(SwiftUI)【英文标题】:variable in observable object not accessible after declaration (SwiftUI) 【发布时间】:2020-06-29 10:38:12 【问题描述】:我正在使用 SwiftUI 和 Firestore 制作应用程序。在 Firestore 数据库中,我保存了“householdID”。当应用程序的特定页面出现时,familyID 会在存储库类中设置,因此在未来的函数调用中,此 homeID 已经设置:
var body: some View
VStack
...
.onAppear(perform:
self.postListVM.postRepository.initHousehold(housholdID: self.session.session?.householdID ?? "")
)
当我在 initHousehold(...) 方法中打印出局部变量时,homeID 会保存到我的局部变量中。
我遇到的问题是,当我现在尝试访问我的 postRepository 类中的局部变量 homeID(通过调用 addVote(..) 方法)时,它说该变量是空的:
class PostRepository: ObservableObject
var householdID: String? = ""
func initHousehold(hid: String)
householdID = hid
print(self.householdID) //prints Optional("LR2GuZaikjxb5Xq5yGBc")
func addVote(post: Post, option: Int, counter: Int)
print(self.householdID) //prints Optional("")
我在另一个类中调用 addVote 函数,如下所示:
...
@Published var postRepository = PostRepository()
...
postRepository.addVote(...)
...
我在这个错误上苦苦挣扎了好几个小时,但无法弄清楚问题可能出在哪里。 感谢您提前提供任何帮助。
【问题讨论】:
你会显示PostRepository
被实例化的代码/视图吗?
我在两个不同的类中实例化 PostRepository,都使用以下代码:@Published var postRepository = PostRepository()
。这可能是问题吗?我认为使用@Published
,我会有类似singelton 的东西?
我假设你只是在这两个地方创建了两个不同的实例,所以它们显然是独立存在的。相反,您必须在两个地方都使用一个实例,因为它们似乎是依赖的。
你是对的,这就是问题所在。我必须创建一个公共变量。非常感谢。
【参考方案1】:
问题是,我在两个不同的位置实例化了 PostRepository。我通过声明一个全局变量解决了这个问题。
【讨论】:
以上是关于声明后不可访问的可观察对象中的变量(SwiftUI)的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 从 Swift 类启动的可观察对象不会更新 ContentView() 上的 @ObservedObject
如何将可观察对象发布的整数变量绑定到 SwiftUI 中的 textField?