【问题标题】:Switching Views With Observable Objects in SwiftUI在 SwiftUI 中使用可观察对象切换视图
【发布时间】:2020-03-13 07:44:17
【问题描述】:

我正在练习尝试在 SwiftUI 中使用可观察对象切换视图,但我的代码无法正常工作。我知道我可以用@State 做到这一点,但我想让它与可观察对象一起工作。当我在内容视图中单击图像时,图像不会改变。有人可以帮我吗?

ContentView.swift

import SwiftUI

struct ContentView: View {

    @ObservedObject var viewRouter: ViewRouter


    var body: some View {

        VStack {

            Button(action: {self.viewRouter.currentPage = "Page2"}) {
                Image(viewRouter.currentPage)
            }

            if viewRouter.currentPage == "Page1" {
                Page1(viewRouter: viewRouter)

            }else if viewRouter.currentPage == "Page2" {
                Page2(viewRouter: viewRouter)
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(viewRouter: ViewRouter())
    }
  }

ViewRouter.swift

import Foundation
import SwiftUI
import Combine

class ViewRouter: ObservableObject {

    let objectWillChange = PassthroughSubject<ViewRouter, Never>()

   @Published var currentPage: String = "Page1"

  }

Page1.swift

import SwiftUI

struct Page1: View {

    @ObservedObject var viewRouter:ViewRouter

    var body: some View {
        VStack {
         Image("ET-LondonBridge")
        }
    }
}

struct Page1_Previews: PreviewProvider {
    static var previews: some View {
        Page1(viewRouter: ViewRouter())
    }
}

Page2.swift

import SwiftUI

struct Page2: View {

    @ObservedObject var viewRouter:ViewRouter

    var body: some View {
        VStack {
            Image("BigBen")
                .aspectRatio(contentMode: .fit)
        }
    }
}

struct Page2_Previews: PreviewProvider {
    static var previews: some View {
        Page2(viewRouter: ViewRouter())
    }
}

【问题讨论】:

    标签: swift navigation observable swiftui


    【解决方案1】:

    您不需要这条线来使所有事情都正常工作。注释掉这一行

    //let objectWillChange = PassthroughSubject<ViewRouter, Never>()
    

    【讨论】:

      猜你喜欢
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多