【发布时间】:2020-07-22 06:02:13
【问题描述】:
我最近遇到了一个问题,我没有找到解决方法。 如果我在环境对象中放置一个可观察对象,我的视图不会在变量发生变化时更新。 这是我的设置:
在 SceneDelegate 中,我使用 environmentObject 标记父视图:
let parent = ParentView().environmentObject(Data())
这是环境对象:
class Data: ObservableObject {
enum Page {
case pageOne
}
var page: Page = .pageOne
var person = Person()
}
现在我的所有视图都链接到父视图:
struct ParentView: View {
@EnvironmentObject var data: Data
var body: some View {
VStack {
if self.data.page == .pageOne {
PageOne()
} else {
Text("No pages")
}
}
}
}
我有一个班级(我称之为“人”):
import Foundation
import SwiftUI
import Combine
class Person: ObservableObject {
let objectWillChange = PassthroughSubject<Person,Never>()
@Published var age = 30 { didSet { objectWillChange.send(self)} }
func birthday() {
self.age += 1
print(age)
}
}
这就是我的问题所在:
struct PageOne: View {
@EnvironmentObject var data: Data
var body: some View {
Text("\(data.person.age)").onTapGesture {
self.data.person.birthday()
}
}
}
当我点击文本时,人的年龄在增加,但视图没有更新。 我想我什至不明白为什么会这样。 我以为我知道它是如何工作的,但显然我不知道。
【问题讨论】: