Search
🌳

@EnvironmentObject

안녕하세요 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
복사