struct StateObject_Tutorials: View {
@State private var color: Color = Color.gray
var body: some View {
VStack {
NumberView()
.frame(width: 200, height: 200)
.background(color)
.clipShape(Circle())
Button {
color = Color(white: Double.random(in: 0.5 ... 1.0), opacity: 1.0)
} label: {
Text("Change Color")
}
.padding()
}
}
}
struct NumberView: View {
@ObservedObject var generator = RandomNumberGenerator()
var body: some View {
Text("\(generator.number)")
.font(.largeTitle)
}
}
@ObservedObejct var generator
을 @StateObject
로 바꾼다.struct NumberView: View {
@StateObject var generator = RandomNumberGenerator()
var body: some View {
Text("\(generator.number)")
.font(.largeTitle)
}
}
@main
struct StatesApp: App {
@StateObject var viewModel = ViewModel()
var body: some Scene {
WindowGroup {
MainList()
}
}
}
이후
@main
struct StatesApp: App {
@StateObject var viewModel = ViewModel()
var body: some Scene {
WindowGroup {
MainList(viewModel: viewModel)
}
}
}
@main
struct StatesApp: App {
@StateObject var viewModel = ViewModel()
var body: some Scene {
WindowGroup {
MainList()
.environmentObject(viewModel)
}
}
}
ObservableObject
로 공유할 데이터 구현@StateObject
로 인스턴스 구현@EnvironmentObject
로 공유