使用单例作为可观察对象

问题描述 投票:0回答:1

我有一个程序员想要在 Swift 中使用单例作为 ObservableObject。这确实有效,但对我来说这似乎不是正确的用法。这是一个例子:

@Observable final class ModelData {
    var counter: Int
    static var shared = ModelData()
    
    init() {
        counter = 0
    }
}

struct ContentView: View {
    @State var model = ModelData.shared
    var body: some View {
        VStack {
            Button("Count") {
                model.counter += 1
            }
            .font(.title)
            
            Button("Count") {
                ModelData.shared.counter += 1
            }
            .font(.title)
            
            Text("\(model.counter)")
                .font(.title)
        }
        .padding()
    }
}

在 Swift 中使用单例作为可观察对象可以吗?或者以这种方式使用它会产生任何不可预见的后果吗?

swift swiftui observation
1个回答
0
投票

为什么这对您来说似乎不是正确的用法?您认为问题是什么?肯定会出现“不可预见”的后果,具体取决于它的使用方式;例如,如果您修改 MainActor 上的 ModelData,但 SwiftUI 观察到的任何对象都是如此。您有什么可预见的后果? (将其变成正确的答案:不。没关系。很常见,甚至。)

© www.soinside.com 2019 - 2024. All rights reserved.