swiftUI里面EnviromentObject的用法

2025-01-25

用途:跨视图(View)传递变量并实时渲染

先设置一个Settings的class

class Settings: ObservableObject{
    @Published var counter: Int = 0
}

使用该变量

 @EnvironmentObject var settings: Settings

            Text("\(settings.counter)")
                .font(.largeTitle)

预览视图使用EnviromentObject

#Preview {
    CounterView().environmentObject(Settings())
}

主App使用EnviromentObject

import SwiftUI

@main
struct learnSwiftUIApp: App {
    
    var body: some Scene {
        WindowGroup {
            CounterView().environmentObject(Settings())
        }
    }
}

完整代码示例



import SwiftUI

class Settings: ObservableObject{
    @Published var counter: Int = 0
}

struct CounterView: View {
    
    @EnvironmentObject var settings: Settings
    
    var body: some View {
        
        VStack {
            Text("\(settings.counter)")
                .font(.largeTitle)
            
            Button("Increment") {
                settings.counter += 1
            }
            
            AnotherCounterView()
        }.frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}

#Preview {
    CounterView().environmentObject(Settings())
}