【发布时间】:2019-08-15 15:09:56
【问题描述】:
在这种特定情况下,当我尝试更改@EnvironmentObject 的@Published var 时,我发现视图没有失效并立即更新。相反,对变量的更改仅在离开模态并返回后才会反映出来。
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
这是一个错误还是我做错了什么?
如果 changeView 是 Modal 中的 @State var,则此方法有效。如果它是 @State var 在 MasterView 内,@Binding var 在 Modal 内,它也可以工作。它只是不适用于此设置。
【问题讨论】:
-
可能我也有同样的问题。当我删除 willSet 以支持 Published 时,某些东西不再起作用
-
@GiuseppeSapienza,看看我的回答,看看它是否对你有帮助。在 beta 5 更新
List之后,我遇到了一个问题,这解决了它。 -
@dfd 感谢现在正在工作(ps iOS 13 beta 7 几分钟前发布)
-
@GiuseppeSapienza,很高兴为您提供帮助。这是我第一次参与测试版。当上周发布 iOS beta 6(现在是 beta 7?)时,我感到很惊讶,但我一直想知道 Xcode beta 6 不是每两周安排一次(像其他人一样),或者他们是否遇到了一些问题。
SwiftUI和/或Combine更改似乎无缘无故发生的速度令人沮丧。这个?如果 iOS beta 7 修复了它,Xcode beta 6 修复了它,或者它的预期行为应该会很有趣。 -
@dfd 我认为这很正常,就像苹果发布 Swift 时,他们在每个版本中都改变了很多东西。无论如何似乎最后一个测试版(Xcode beta 7)并没有解决这个问题
标签: swiftui