gpt4 book ai didi

swiftui - 更改为@EnvironmentObject中的@Published var不会立即反射(reflect)出来

转载 作者:行者123 更新时间:2023-12-04 17:14:31 26 4
gpt4 key购买 nike

在这种特定情况下,当我尝试更改@EnvironmentObject@Published var时,我发现该 View 没有失效并立即更新。取而代之的是,对变量的更改仅在离开模态并返回后才反射(reflect)出来。

import SwiftUI

final class UserData: NSObject, ObservableObject {
@Published var changeView: Bool = false
}

struct MasterView: View {
@EnvironmentObject var userData: UserData
@State var showModal: Bool = false

var body: some View {
Button(action: { self.showModal.toggle() }) {
Text("Open Modal")
}.sheet(isPresented: $showModal, content: {
Modal(showModal: self.$showModal)
.environmentObject(self.userData)
} )
}
}

struct Modal: View {
@EnvironmentObject var userData: UserData
@Binding var showModal: Bool

var body: some View {
VStack {
if userData.changeView {
Text("The view has changed")
} else {
Button(action: { self.userData.changeView.toggle() }) {
Text("Change View")
}
}
}
}
}



#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
MasterView().environmentObject(UserData())
}
}
#endif

video showing view changing only after modal is dismissed

这是一个错误还是我做错了什么?

如果 changeView是Modal中的 @State var,则此方法有效。如果它是 @State var内的 MasterView@Binding var内的 Modal,则它也可以工作。它不适用于此设置。

最佳答案

改变中

final class UserData: NSObject, ObservableObject  {


final class UserData: ObservableObject  {

确实解决了Xcode11 Beta6中的问题。 SwiftUI似乎不能正确处理实现 NSObjectObservableObject子类(至少它似乎没有调用它的内部 willSet块)。

关于swiftui - 更改为@EnvironmentObject中的@Published var不会立即反射(reflect)出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57511826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com