Hacking with Swift 사이트의 강좌 번역본입니다.
[원문 : https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-environmentobject-property-wrapper]
What is the @EnvironmentObject property wrapper?
SwiftUI의 @EnvironmentObject property wrapper는 전체 SwiftUI 앱에서 공유된 데이터에 의존하는 뷰를 만들수 있습니다. 예를들어, 앱의 많은 부분에서 공유될 수 있도록 만들기 위해서, @EnvironmentObject를 사용해야 합니다.
예를들어, 다음과 같은 Order 클래스가 있습니다.
class Order: ObservableObject {
@Published var items = [String]()
}
그것은 ObservableObject를 준수하며, @ObservedObject 또는 @EnvironmentObject를 사용할 수 있는 것을 의미합니다. 이 경우에, 다음과 같이 @EnvironmentObject를 사용해서 뷰를 만들 수 있습니다.
struct ContentView: View {
@EnvironmentObject var order: Order
var body: some View {
// your code here
}
}
해당 order property가 기본 값이 제공되지 않은 것을 주목하세요 - @EnvironmentObject를 사용해서 뷰에서 명시적으로 생성되기보다는 SwiftUI environment에 의해 값이 제공될 것이라는 것을 말합니다.
@EnvironmentObject는 @ObservedObject와 공통점이 많습니다: 둘 다 반드시 ObservableObject를 준수하는 클래스를 참조해야 하며, 둘 다 여러 뷰들간에 공유할 수 있고, 둘 다 중요한 변경사항이 발생했을때 관찰하는 모든 뷰를 업데이트 할 것입니다. 하지만 @EnvironmentObject는 구제적으로 이 객체는 현재 뷰에 의해 만들어지거나 명확하게 전달되기 보다는 외부요소로부터 제공될 것입니다라는 것을 의미합니다.
현실적인 관점에서, 뷰 A가 있고, 뷰 A가 뷰 E가 원하는 데이터를 가지고 있다고 상상해보세요. @ObservedObject를 사용한 뷰 A가 객체를 뷰 B에게 전달하고, 뷰 C에게 전달하고나서, 뷰 D에게, 마지막으로는 뷰 E에게 전달해야합니다 - 중간에 있는 모든 뷰들은 객체가 실제로 필요하지 않더라도 전달해야합니다.
@EnvironmentObject를 사용할때, 뷰 A는 객체를 만들고 environment 안에 배치할 수 있습니다. 모든 뷰 내부에서 명시적으로 전달하는 대신에, 원할때마다 요청만으로 environment 객체을 사용할 수 있습니다 - 코드를 훨씬 간결하게 만듭니다.
경고: @EnvironmentObject를 사용한 뷰가 보여질때, SwiftUI는 정확한 타입의 객체에 대해 environment에서 바로 검색할 할 것입니다. 객체를 찾지 못하는 경우에(예를들어, invironment에 배치하는 것을 잊은 경우) 앱은 크래쉬가 발생할 것입니다. @EnvironmentObject를 사용할때, 필요할때 environment에 객체가 존재할 것이라고 사실상 약속을 하는 것이며, 암시적인 unwrapped optionals을 사용하는 것과 조금 비슷합니다.
'SwiftUI > Appendix A' 카테고리의 다른 글
What is the @FetchRequest property wrapper? (0) | 2019.11.22 |
---|---|
What is the @GestureState property wrapper? (0) | 2019.11.22 |
What is the @Binding property wrapper? (0) | 2019.11.22 |
What is the @Environment property wrapper? (0) | 2019.11.22 |
What is the @ObservedObject property wrapper? (0) | 2019.11.21 |
What is the @Published property wrapper? (0) | 2019.11.21 |
What is the @State property wrapper? (0) | 2019.11.21 |
Understanding property wrappers in Swift and SwiftUI (0) | 2019.11.21 |