Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Jupyo's Daily Story

@Environment 본문

SwiftUI

@Environment

JangJupyo 2024. 9. 27. 10:25
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