簡體   English   中英

SwiftUI - 基於 ObservedObject 的條件在后續視圖中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM