SwiftUI 如何管理状态?
Posted
技术标签:
【中文标题】SwiftUI 如何管理状态?【英文标题】:How does SwiftUI manage state? 【发布时间】:2020-07-20 13:57:38 【问题描述】:我有一个 UIViewControllerRepresentable implementation,我注意到 makeUIViewController
只被调用一次,而 init
被多次调用。
同样,视图控制器的 init
被多次调用,但它所包裹的滚动视图只创建一次,viewDidLoad
只被调用一次。
SwiftUI 是否持有对控件的引用,然后将它们重新插入到新的视图控制器实例中?生命周期的某处有描述吗?
【问题讨论】:
【参考方案1】:如果新视图与旧视图不同(根据您对Equatable
的实现),它可能只调用makeUIViewController
。
我认为 SwiftUI 经常(在状态更改时)重新创建基于 struct
的视图层次结构以检查是否有任何更改。每次发生这种情况时,都会调用您的 init
方法。但如果没有任何变化,SwiftUI 将不会请求 ViewController 的新实例。
【讨论】:
该实现在其初始化中创建控制器。在第一次请求之后,可能没有使用新的控制器。以上是关于SwiftUI 如何管理状态?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 更新父视图的状态时如何保留子视图的状态?
如何在 SwiftUI 应用程序生命周期中更改特定视图的状态栏颜色?