티스토리 뷰

Publisher중 @EnvironmentObject앱이 살아있는 한, 계속 메모리에 존재하는 퍼블리셔이다.

전체 앱의 생명주기에서 계속 필요한 정보, 그리고 모든 뷰에서 필요한 정보를 갖고 있게 하면 된다. 

 

@EnviromentObject는 data가 바뀔 때, view가 automatically updated 되는것도 보장해준다.  

 

A, B, C, D에서 같은 @ObservedObject를 쓰려면, A에서 B로 전달, B에서 C로 전달, C에서 D로 전달해줘야 한다. 너무 귀찮다. 이런 점을 @EnvironmentObject는 깔끔하게 해결해준다. @EnviromentObject에 넣어두면 A, B, C, D에서 바로 쓸 수 있다. 

 

** 주의점: EnvironmentObject는 조상 view에서 넘겨줘야 한다. preview crash 의 원인이 될 수도 있다. **

예제

class UserSettings: ObservableObject {
    @Published var score = 0
}

UserSettings 클래스를 하나 만들었다. 

 

이제 SceneDelegate에서, 

var settings = UserSettings() 

하나 만들어 주고, 

window.rootViewController = UIHostingController(rootView: ContentView().environmentObject(settings))

 

이런식으로 넣어주면

 

ContentView()에서도 쓸 수 있고, ContentView가 띄워주는 다른 뷰에서도 쓸 수 있다. 

 

ContentView와 그가 띄워주는 뷰들에서는

@EnvironmentObject var settings: UserSettings

이렇게 써줘야하고, default value는 필요 없다. 

 

** preview를 위해서 **

ContentView().environmentObject(UserSettings())

을 써줘야 돌아간다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함