本文介绍了在 SwiftUI 中使用可观察对象切换视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在练习尝试使用 SwiftUI 中的可观察对象切换视图,但我的代码不起作用.我知道我可以用@State 做到这一点,但我想让它与可观察对象一起工作.当我在内容视图中单击图像时,图像不会改变.有人可以帮我吗?
I am practicing trying to switch views using observable objects in SwiftUI, but my code isn't working. I know I can do this with @State, but I would like to get this working with observable objects. When I click on the image in the content view, the image doesn't change. Can someone help me?
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()) } } 推荐答案你不需要这条线就可以让所有事情正常进行.只需注释掉这一行
You don't need this line to make all things work. Just comment out this line
//let objectWillChange = PassthroughSubject<ViewRouter, Never>()更多推荐
在 SwiftUI 中使用可观察对象切换视图
发布评论