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 - 更新父视图的状态时如何保留子视图的状态?

如何在 SwiftUI 应用程序生命周期中更改特定视图的状态栏颜色?

如何在 SwiftUI 应用生命周期中更改状态栏样式?

SwiftUI如何从视图调用或通知scenedelegate

如何使用 SwiftUI 重置子视图状态变量?