在 SwiftUI 中使用可观察对象切换视图
Posted
技术标签:
【中文标题】在 SwiftUI 中使用可观察对象切换视图【英文标题】:Switching Views With Observable Objects in SwiftUI 【发布时间】:2020-03-13 07:44:17 【问题描述】:我正在练习尝试,但我的代码无法正常工作。我知道我可以用@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())
【问题讨论】:
【参考方案1】:您不需要这条线来使所有事情都正常工作。注释掉这一行
//let objectWillChange = PassthroughSubject<ViewRouter, Never>()
【讨论】:
以上是关于在 SwiftUI 中使用可观察对象切换视图的主要内容,如果未能解决你的问题,请参考以下文章
如何将可观察对象发布的整数变量绑定到 SwiftUI 中的 textField?