반응형

 

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를 지정하지 않으면 정확하게 읽는게 불가능하다는 것을 의미합니다.

반응형
Posted by 까칠코더
,