gpt4 book ai didi

swiftui - 如何将全局应用程序状态桥接到模型 View (使用@ObservedObject)?

转载 作者:行者123 更新时间:2023-12-05 07:13:55 24 4
gpt4 key购买 nike

我正在开发一个 SwiftUI 项目,其中我有一个集中式应用程序状态架构(类似于 Redux)。此应用程序状态类是 ObservableObject 类型,并使用 @EnvironmentObject 直接绑定(bind)到 SwiftUI View 类。

以上内容适用于小型应用程序。但是随着 View 层次结构变得越来越复杂,性能问题开始出现。原因是,即使 View 可能只需要一个属性,ObservableObject 也会对已订阅的每个 View 触发更新。

我解决这个问题的想法是在全局应用程序状态和 View 之间放置一个模型 View 。模型 View 应具有全局应用程序状态的属性子集,即由特定 View 使用的属性。它应该订阅全局应用程序状态并接收每次更改的通知。但是模型 View 本身应该只触发对 View 的更新以更改全局应用程序状态的子集。

所以我必须在两个可观察对象(全局应用程序状态和模型 View )之间建立桥梁。如何做到这一点?

这是一个草图:

class AppState: ObservableObject {
@Published var propertyA: Int
@Published var propertyB: Int
}

class ModelView: ObservableObject {
@Published var propertyA: Int
}

struct DemoView: View {
@ObservedObject private var modelView: ModelView

var body: some View {
Text("Property A has value \($modelView.propertyA)")
}
}

最佳答案

这是可行的方法

class ModelView: ObservableObject {
@Published var propertyA: Int = 0

private var subscribers = Set<AnyCancellable>()

init(global: AppState) {
global.$propertyA
.receive(on: RunLoop.main)
.assign(to: \.propertyA, on: self)
.store(in: &subscribers)
}
}

关于swiftui - 如何将全局应用程序状态桥接到模型 View (使用@ObservedObject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60055282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com