首页 > 解决方案 > 我是否应该检查我是否为 @Published 属性分配了不同的值?

问题描述

我有一个简单的代码示例,其中我更新了具有相同值@State@Published属性(单击按钮时)。现在我看到了,然后我将相同的值分配给@State没有视图的主体调用。但是然后我分配给@Published财产,然后每个分配都有调用。我知道它可能很快,但仍然可能会不必要地调用视图主体。

那么我应该检查我是否真的改变了@Published财产的价值,还是有其他方法?

class Object: ObservableObject {
    @Published var state: Bool = false
    
    func setState() {
        state = false
    }
}

struct ContentView: View {
    @State var state: Bool = false
    @ObservedObject var obj = Object()

    var body: some View {
        print(Self._printChanges())
        return VStack {
            Text("\(String(state))")
            Button("Tap") {
                self.state = false
                obj.setState()
            }
        }
    }
}

点击输出(3 次):

ContentView: _obj changed.
()
ContentView: _obj changed.
()
ContentView: _obj changed.
()

标签: iosswiftswiftui

解决方案


SwiftUI 是声明性的,因此可以说这种特定行为是一个实现细节,我不会担心。仅仅因为 SwiftUI 正在调用body并不一定意味着您的 UI 正在被重绘。实际上,如果每个视图都具有相同的“身份”且数据未更改,则您无需担心额外的 SwiftUI 绘图调用。系统将知道没有任何变化,也不会产生 UI 开销。

除非您已将其明确描述为应用程序中的性能瓶颈,否则您无需为此进行修补。除非您有充分的理由,否则不要优化任何东西,否则您只是在浪费时间(因为可能首先要解决其他瓶颈)。


推荐阅读