![](/img/trans.png)
[英]SwiftUI: Why doesn't ObservedObject work in AppDelegate?
[英]SwiftUI - Conditional based on ObservedObject doesn't work in subsequent Views
我有一個非常簡單的應用程序,其中包含兩個與NavigationLink
綁定在一起的視圖。 在第一個視圖ContentView
中,我可以按預期看到ObservedObject
的更新。 但是,當我 go 到下一個View
時,似乎基於ObservedObject
的代碼無法識別更改。
ContentView.swift(工作視圖):
import SwiftUI
struct ContentView: View {
@ObservedObject var toggleObject = ToggleObject()
var body: some View {
NavigationView {
VStack(spacing: 15) {
Toggle(isOn: self.$toggleObject.isToggled) {
Text("Toggle:")
}
if self.toggleObject.isToggled == true {
Text("ON")
}
else {
Text("OFF")
}
NavigationLink(destination: ShowToggleView()) {
Text("Show Toggle Status")
}
}
}
}
}
ShowToggleView.swift(不符合我預期的視圖):
import SwiftUI
struct ShowToggleView: View {
@ObservedObject var toggleObject = ToggleObject()
var body: some View {
Form {
Section {
if self.toggleObject.isToggled {
Text("Toggled on")
}
else {
Text("Toggled off")
}
}
}
}
}
所有這些數據都存儲在一個簡單的文件 ToggleObject.swift 中:
import SwiftUI
class ToggleObject: ObservableObject {
@Published var isToggled = false
}
當我在第一個View
中打開它時,我看到預期的文本“ON”,但是當我 go 進入下一個視圖時,無論我在第一個View
中做什么,它都會顯示“切換關閉”......這是為什么呢?
使用 Xcode 11.5 和 Swift 5
你幾乎做的一切都是正確的。 但是,您正在第二個視圖中創建另一個ToggleObject()
實例,它會覆蓋數據。 您基本上只創建一個 ObservedObject,然后將其傳遞給您的子視圖,因此它們都訪問相同的數據。
將其更改為:
struct ShowToggleView: View {
@ObservedObject var toggleObject : ToggleObject
然后將 object 傳遞到導航鏈接中的該視圖...
NavigationLink(destination: ShowToggleView(toggleObject: self.toggleObject)) {
Text("Show Toggle Status")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.