作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 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/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!