You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI的@ObservedObject在UIKit更新后未同步至SwiftUI问题排查

问题分析与解决

错误原因

你遇到的问题核心是实例不共享:

  • MyNavBarConfigurator内部创建了一个全新的HomeNavBar实例(private var model = HomeNavBar()),这个实例和传入HomeView的HomeNavBar对象完全无关。
  • 你更新这个独立实例的leftButton属性,HomeView正在观察的是另一个实例,自然不会收到属性变更通知,视图也就不会刷新。

修正方案

让MyNavBarConfigurator持有和HomeView相同的HomeNavBar实例,而不是自行创建新实例。

修正后的MyNavBarConfigurator代码

import SwiftUI
struct MyNavBarConfigurator {
   private var model: HomeNavBar
   
   // 通过初始化方法接收外部传入的HomeNavBar实例
   init(model: HomeNavBar) {
       self.model = model
   }
   
   func show(){
      model.leftButton = true // 现在修改的是与HomeView共享的实例
   }
}

使用时确保实例共享

在创建HomeView和MyNavBarConfigurator时,必须传入同一个HomeNavBar实例:

// 创建唯一的HomeNavBar实例
let navBarModel = HomeNavBar()

// 初始化HomeView,传入该实例
let homeView = HomeView(model: navBarModel)

// 初始化MyNavBarConfigurator,同样传入该实例
let configurator = MyNavBarConfigurator(model: navBarModel)

// 调用show方法,HomeView会收到属性变更通知并刷新
configurator.show()

额外说明

如果需要在多个组件间共享这个HomeNavBar实例,除了手动传递,也可以考虑使用单例模式(注意按需使用,避免滥用),或者通过依赖注入框架统一管理实例。

内容的提问来源于stack exchange,提问作者Ganesh G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:02:38