SwiftUI 如何使用 @StateObject 创建和监视外部对象? 代码演示

7 min read

SwiftUI 中可以使用 @StateObject 属性包装器来创建和监视外部对象。以下是一个简单的示例,演示了如何使用 @StateObject 创建和监视一个自定义对象:

import SwiftUI

// 自定义对象
class MyObject: ObservableObject {
    @Published var count = 0
}

struct ContentView: View {
    // 使用 @StateObject 属性包装器创建 MyObject 对象
    @StateObject var myObject = MyObject()
    
    var body: some View {
        VStack {
            // 监视 myObject 的 count 属性,当其发生变化时刷新视图
            Text("Count: \(myObject.count)")
                .padding()
            
            // 按钮点击时增加 myObject 的 count 属性
            Button("Add") {
                myObject.count += 1
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在这个示例中,我们首先定义了一个自定义对象 MyObject,其中包含了一个 @Published 属性 count。接着在 ContentView 中使用 @StateObject 属性包装器创建 myObject 实例,并在后面的视图中使用它。当我们点击 Add 按钮时,会增加 myObjectcount 属性的值。在视图中使用 Text 显示 myObjectcount 属性的值,并使用 padding() 添加一些空白间隙。

值得注意的是,当我们使用 @StateObject 属性包装器创建对象时,SwiftUI 会自动处理对象的内存管理,确保对象在视图层次结构中仅被实例化一次。这样可以避免不必要的开销,并确保对象的状态始终与应用程序的其余部分同步。