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
相关产品推荐
相关产品推荐

