Hacking with Swift 사이트의 강좌 번역본입니다.
[원문 : https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-environment-property-wrapper]
What is the @Environment property wrapper?
SwiftUI는 @Environment와 @EnvironmentObject property wrappers 모두 제공하지만, 그것들은 미묘한 차이가 있습니다 : @EnvironmentObject는 environment 안에 임의의 값을 넣을수 있으며, @Environment는 특별히 사전 정의된(pre-defined) 키(keys)로 작업하기 위한 것입니다.
예를들어, @Environment는 Core Data 관리 객체 컨텍스트(context), 기기가 다크(dark) 모드 또는 라이트(light) 모드인지, 뷰를 그리는 size class, 등등을 읽기에 좋습니다 - 시스템에서 오는 고정된 properties 이며, 다음과 같이 보입니다.
@Environment(\.horizontalSizeClass) var horizontalSizeClass
@Environment(\.managedObjectContext) var managedObjectContext
반면에, @EnvironmentObject는 다음과 같이, environment로 부터 임의의 객체를 읽을 수 있도록 설계 되었습니다.
@EnvironmentObject var order: Order
차이점이 작은것 같지만, @EnvironmentObject가 구현된 방식 때문에 중요합니다. order가 Order 타입이라고 할때 SwiftUI는 environment에서 그 타입의 객체를 찾고 order property에 붙여넣을 것입니다. 하지만, @Environment를 사용할때 많은 것들을 동일한 데이터 타입으로 공유하기 때문에, 같은 동작은 불가능합니다.
예를들어:
@Environment(\.accessibilityReduceMotion) var reduceMotion
@Environment(\.accessibilityReduceTransparency) var reduceMotion
@Environment(\.accessibilityEnabled) var accessibilityEnabled
이러한 3개의 environment keys 모두 Boolean을 반환하므로, 정환한 특정 key를 지정하지 않으면 정확하게 읽는게 불가능하다는 것을 의미합니다.
'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 @EnvironmentObject 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 |