SwiftUI🐧

SwiftUI) @Environment

성실농장주 2023. 11. 29. 03:04

애플에서 제공하는 visionOS 샘플코드인 "Hello World"를 분석하면서 처음 보게된 프로퍼티 랩퍼입니다.

문서에서는 "뷰의 환경으로부터 온 값을 읽는 프로퍼티 랩퍼"라고 정의 되어있습니다.

Environment 프로퍼티 랩퍼는 뷰의 환경에 저장된 값을 읽기 위하여 사용됩니다. 프로퍼티 선언 안에 EnvironmentValues의 key path를 사용해서 읽을 값을 가리킵니다.

 

Environment 프로퍼티 랩퍼를 통해서 "사용자가 생성한 Observable 클래스 혹은 구조체" 혹은 "EnvironmentValues에 선언된 프로퍼티"을 가져올 수 있습니다.

@Environment 로 "Observable 클래스 혹은 구조체" 데이터 가져오기

Observable를 하고 있는 PersonModel을 정의하였고 각각의 해당 클래스의 프로퍼티들은 초기화한 상태입니다.

Environment 프로퍼티 랩퍼를 사용해서 PersonModel 클래스의 프로퍼티들의 값들을 가져올 수 있습니다.

PersonModel의 값들을 생성된 레이블에 출력하는 이미지 입니다.

해당 클래스의 프로퍼티의 값을 변경이 가능하고 변경과 동시에 디스플레이에 반영이 됩니다.

 

 

 

위에 코드들은 애플에서 제공하는 visionOS 샘플코드인 "Hello World"입니다. Environment를 통해 데이터를 가져오게 하려는 클래스의 명 ViewModel인것을 봤을때 혹은 기능적으로도 봤을때, MVVM을 구현할때 ViewModel을 Environment를 이용해서 구현하는것으로 예상됩니다.

 

@Environment로 "EnvironmentValues에 선언된 프로퍼티" 가져오기

현재 환경의 데이터를 가져오기 위해 이미 EnvironmentValues 구조체에 이미 선언된 프로퍼티의 값(wrappedValue)를 가져올 수 있습니다.

대표적으로 colorScheme(현재 light mode인지 dark mode에 대한 프로퍼티)가 있습니다.

 

mode에 따라 텍스트가 변하는 코드를 작성하였습니다. light mode에서는 "light", dark mode에서는 "dark"를 출력하는 것을 확인할 수 있습니다.

 

오늘은 @Environment에 대해서 알아 보았습니다.

 

잘못된 내용이 있다면 피드백 부탁드리겠습니다. 감사합니다.