假设我有UserSettings
EnviornmentObject
并且它的一个属性是一个类,问题是当我更改该类的值时,EnviornmentObject
不会发布这些更改。我明白为什么,但我似乎找不到解决方法。
这是显示问题的简化代码:
struct TestView: View {
@EnvironmentObject var settings: UserSettings
var body: some View {
ZStack {
Text("test: \(self.settings.ob.val)")
VStack {
// This is the only one that works and that makes sense, it changes the entire object
Button(action: {
self.settings.changeOb(to: testOb(val: "1"))
}) {
Text("Change object")
}
// From here on nothing works, I tried different ways to change the object value
Button(action: {
self.settings.ob.changeVal(to: "2")
}) {
Text("Change object's val")
}
Button(action: {
self.settings.changeVal(to: "3")
}) {
Text("Change object's val V2")
}
Spacer()
}
}
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
return ZStack {
TestView().environmentObject(UserSettings(ob: testOb("abc")))
}
}
}
class testOb: ObservableObject {
@Published private(set) var val: String
init(val: String) {
self.val = val
}
func changeVal(to: String) {
self.val = to
}
}
class UserSettings: ObservableObject {
@Published private(set) var ob: testOb
init(ob: testOb) {
self.ob = ob
}
func changeOb(ob: testOb) {
self.ob = ob
}
func changeVal(to: String) {
self.ob.val(to: to)
}
}