[SwiftUI] Environment, EnvironmentValues에 대하여

Uno·2021년 3월 21일
2

SwiftUI

목록 보기
4/30

참고) 공식문서에 대한 번역에 가까움.


정의

공식문서 상에 다음과 같이 적혀있습니다.

Environment

a property wrapper that reads a value from a view's environment.

-> 프로퍼티 를 감싸는 것인데 (that절, 값을 읽을 수 있는데 그 값은 View의 환경(설정이라고 오역하는게 받아들이기 쉬울 수 있습니다.))

정리하면, 뷰의 설정해야하는 값들이 있는데, 그 값들을 읽어올 수 있게해주는 썸띵? 정도로 정리할 수 있을 것 같아요.

개요

Environment property wrapper는 뷰의 속성설정 값을 읽어올 때 사용해라. 그것들은 keypath를 사용해서 값을 읽어올 수 있도록 지정해줘라.
(근데 이 keypath가 뭣이냐. "EnvironmentValues"들이다.)

아 그러면 EnvironmentValues 가 뭔지 알아야겠죠?
퉁치고 이해하자면, 뷰의 속성 중 하나입니다. 이렇게 말하면 이해가 부족할 수 있으니 예시를 찾아봤어요!(물론 공식문서)

상당히 많이 있지만 몇 개만 작성할게요.
Accessing Color Schemes)
colorScheme, ColorScheme, colorSchemeContrast, ColorSchemeContrast

Accessing View Settings)
calendar, edithMode, isEnabled, locale, PresentationMode, timeZone

등등 있습니다.
아마 여기 중 하나의 값들 중 하나를 선택하여 설정하는 것이겠죠?

사용예시

작성된 사용예시는 다음과 같습니다.

@Environment(\.colorScheme) var colorScheme: ColorScheme

이렇게 contentView에 정의를 할겁니다. 그리고 body에서 적절한 시기에 이 속성값들을 활용하겠죠? 아래처럼요.

if colorScheme == .dark { // Checks the wrapped value.
    DarkContent()
} else {
    LightContent()
}

나머지 공식문서의 내용은

  • 값이 변하면 너의 뷰도 그에 값에 맞춰 변한다.
  • 프로퍼티 래퍼는 설정하지 않으면 기본적으로 디폴트다.
  • 너는 오버라이드할 수 있고 커스텀할 수도 있다.environment(_:_:)메소드를 활용해서
    SwiftUI에서 제공하는 environment values를 보고 싶다면 EnvironmentValues를 참고해라(위에서 예시든 것의 출처)
  • 좀 더 자세한 정보를 원하면 EnvironmentKey(protocol)를 볼 수 있도록.

EnvironmentKey(protocol) 에 대해서는 추후에 새로운 글로 올리겠습니다!

정리

  • 내가 뷰의 특정 속성(기본값으로 되어있는) 것을 변경하고 싶다! 라는 생각이 들면 environment를 떠올리면 됩니다. 이후 검색을 하면서 기억들을 리마인드하시면 직면한 문제를 해결할 수 있을 겁니다!
profile
iOS & Flutter

0개의 댓글