手动更新 SwiftUI View

Posted

技术标签:

【中文标题】手动更新 SwiftUI View【英文标题】:Manual update of SwiftUI View 【发布时间】:2019-11-21 06:25:21 【问题描述】:

传统上,SwiftUI 应用程序会自动更新其视图以响应任何状态更改。当@State propertyWrapper 检测到任何更新时会发生这种情况。我很好奇,是否可以手动重绘 SwiftUI 视图,而不是依赖@State 数据绑定技术?

【问题讨论】:

你为什么要这样做? SwiftUI 使用的是 MVVM 模式,而不是 MVC。在 MVVM 中,ViewModel 负责重绘视图。因此,更改 ViewModel 将重绘视图。 @Sweeper 我想使用 SwiftUI 作为更高级别框架的渲染层。所以我想在每个事件上重新生成一个新视图,将它与旧视图进行比较,然后手动重绘。 【参考方案1】:

您可以使用ObservableObject 对象作为模型,然后调用objectWillChange.send() 来触发刷新

struct MyView : View 
    @ObservedObject var model: Model
    var body: some View  .. 


class Model: ObservableObject  
    func reloadView() 
        objectWillChange.send()
     

【讨论】:

以上是关于手动更新 SwiftUI View的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 不会将状态更新为 @ObservedObject cameraViewModel 对象

删除 SwiftUI 后 Firebase Firestore 不更新 UI

子视图更改SwiftUI后更新视图

在 SwiftUI 中使用 @State 属性包装器未更新视图

SwiftUI 小部件无法刷新

SwiftUI 中的底部优先滚动