안녕하세요 iOS 개발자 루크입니다
오늘은 StateObject 에 이어서
EnvironmentObject 에 대해서 알아보곘습니다
@EnvironmentObject란?
A property wrapper type for an observable object supplied by a parent or ancestor view.
부모뷰 또는 조상뷰에서 제공되는 관찰가능한 객체를 위한 프로퍼티 래퍼.
언제 사용할까?
•
자식 뷰의 어디에서나 같은 모델 데이터를 공유하고자 할 때,
•
데이터가 변경될 때 뷰가 자동으로 업데이트 되도록 할 때
•
뷰 계층구조의 depth 가 깊어서 데이터를 전달,전달하기 귀찮을때.
어떻게 사용할까?
Root 뷰에 메서드로 건네주기
ContentView()
.environmentObject(myObject)
Swift
복사
Root 뷰 정의부에 환경변수 선언해주기
struct ContentView: View {
@EnvironmentObject var myObject: MyObject
var body: some View {
VStack {
Text("\(self.userSetting.score)")
.font(.largeTitle)
Button("클릭시 score 상승") {
self.userSetting.score += 1
}
Divider()
.padding()
//subView 에 바인딩으로 전달해줄 필요 없음
View()
}
}
}
Swift
복사
하위 뷰에도 똑같은 이름으로 선언해주기
struct MyScoreView: View {
//하위 뷰에도 똑같은 이름의 환경변수를 선언해 주면된다.
@EnvironmentObject var myObject: MyObject
var body: some View {
VStack {
// before : Text("\(self.score)")
Text("\(self.userSetting.score)")
Button("클릭시 score 증가") {
//before : self.score += 1
self.userSetting.score += 1
}
.padding()
.background(Color.orange)
.foregroundColor(.black)
}
.padding()
.background(Color.yellow)
}
}
Swift
복사