Jupyo's Daily Story
@Environment 본문
728x90
반응형
@Environment는 SwiftUI에서 공통적으로 사용되는 값을 공유하고 관리하기 위한 프로퍼티 래퍼입니다. 전역적으로 값을 전달하는 방법을 제공하며, 뷰 계층 구조 전체에서 상위 뷰가 설정한 환경 값을 하위 뷰가 접근하고 사용할 수 있습니다.
@Environment란?
- @Environment는 SwiftUI에서 뷰 계층 구조 전체에 걸쳐 공유할 수 있는 전역 값을 읽고, 사용하는 프로퍼티 래퍼입니다.
- 상위 뷰에서 설정한 환경 값을 하위 뷰에서 간단하게 사용할 수 있습니다.
- 주로 앱의 설정이나 테마, 시스템 환경 정보 등과 같은 전역적인 데이터를 공유할 때 사용됩니다.
사용 이유
- 뷰 간에 공통적으로 사용되는 값을 하위 뷰에 쉽게 전달하기 위해 사용합니다.
- 데이터를 일일이 직접 전달하지 않고, 필요한 시점에 뷰에서 환경 값을 가져다 쓸 수 있는 편리함을 제공합니다.
기본 사용 예시
import SwiftUI
struct ContentView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text("Hello, World!")
.padding()
.background(colorScheme == .dark ? Color.black : Color.white)
}
}
- @Environment(\.colorScheme): 현재 사용 중인 다크 모드 또는 라이트 모드 값을 읽어옵니다.
- 이 값에 따라 배경색을 설정해 다크 모드일 때는 검정색, 라이트 모드일 때는 흰색 배경을 사용합니다.
커스텀 Environment 값 생성하기
SwiftUI에서는 커스텀 환경 값을 만들 수 있습니다. 이를 통해 특정한 데이터를 전역적으로 관리할 수 있습니다.
import SwiftUI
struct ContentView: View {
@Environment(\.customValue) var customValue
var body: some View {
Text("Custom Value: \(customValue)")
}
}
struct ParentView: View {
@State private var customValue: String = "Hello, World!"
var body: some View {
ContentView()
.environment(\.customValue, customValue)
}
}
// 커스텀 환경 키 생성
struct CustomValueKey: EnvironmentKey {
static let defaultValue: String = "Default Value"
}
extension EnvironmentValues {
var customValue: String {
get { self[CustomValueKey.self] }
set { self[CustomValueKey.self] = newValue }
}
}
- 커스텀 환경 값을 생성하고, 이를 상위 뷰에서 설정하여 하위 뷰에서 사용할 수 있게 합니다.
- EnvironmentKey와 EnvironmentValues를 확장하여 커스텀 키를 만들고, 이를 전역 값으로 설정합니다.
@EnvironmentObject와의 차이점
- @Environment는 SwiftUI가 미리 제공하는 시스템 환경 값(예: colorScheme, locale)이나 커스텀 환경 값을 다루는 데 사용됩니다.
- @EnvironmentObject는 뷰 계층을 통해 객체를 주입하고, 그 객체의 상태를 자동으로 감시하여 뷰가 업데이트되도록 하는 방식입니다.
- 차이점: @Environment는 전역 값을 공유하는 것이고, @EnvironmentObject는 객체 자체를 공유하는 것입니다.
프로퍼티 래퍼 | 역할 | 사용 용도 |
@Environment | 공통 전역 값을 읽어옴 | 시스템 환경 값, 커스텀 값 관리 |
@EnvironmentObject | 객체 상태를 뷰 계층에서 공유 및 감시 | 상태 관리 객체 공유 |
주요 시스템 환경 값
SwiftUI는 몇 가지 기본적인 환경 값을 제공합니다. 자주 사용되는 값들을 아래와 같습니다.
환경 값 | 설명 |
colorScheme | 다크 모드 또는 라이트 모드인지 구분 |
locale | 현재 사용 중인 지역 설정(언어 및 지역) |
sizeCategory | 사용자의 특스트 크기 설정 |
isEnabled | 현재 상호작용 가능한 상태인지 여부 |
accessibilityReduceMotion | 애니메이션을 줄이도록 설정되어 있는 여부 |
요약
- @Environment는 전역적 데이터를 뷰 계층 전체에 걸쳐 전달하는 프로퍼티 래퍼입니다.
- 시스템 환경 값과 커스텀 값을 설정해 하위 뷰에서 쉽게 접근할 수 있습니다.
- 뷰 간에 데이터 공유를 단순화하고, 필요에 따라 사용자 정의 전역 값을 설정할 수 있습니다.
반응형
'SwiftUI' 카테고리의 다른 글
GeometryReader (2) | 2024.09.27 |
---|---|
@Published (0) | 2024.09.22 |
@ObservedObject (0) | 2024.09.21 |
@Binding (2) | 2024.09.16 |
@StateObject (0) | 2020.10.15 |