Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- swiftUI
- HIG
- 애니메이션
- Refactoring
- 리펙터링
- 리팩토링
- Protocol
- collectionview
- clean architecture
- uiscrollview
- UICollectionView
- tableView
- SWIFT
- Observable
- combine
- Clean Code
- swift documentation
- MVVM
- map
- ribs
- 스위프트
- UITextView
- RxCocoa
- 클린 코드
- 리펙토링
- Xcode
- ios
- rxswift
- Human interface guide
- uitableview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - SwiftUI] 튜토리얼 - 12. EnvironmentValues, @Environment, EnvironmentKey 개념 본문
iOS 튜토리얼 (SwiftUI)
[iOS - SwiftUI] 튜토리얼 - 12. EnvironmentValues, @Environment, EnvironmentKey 개념
jake-kim 2022. 7. 14. 22:05EnvironmentValues
- superview에서 darkmode로 설정하면 subviews들도 모두 darkmode로 변할 수 있는 기능을 EnvironmentValues로 제어가 가능
- Swift에서는 개별 클래스로 관리하였지만, SwiftUI에서는 모두 Environment를 통해서 모두 접근이 가능
- 가장 대표적인 값은, 지금 지역을 알 수 있는 locale과 layoutDirection, undoManager 등 접근 가능
ex) superview에서 `colorScheme`값을 dark로 지정하면 subview들은 자동으로 dark mode로 변경
- EnvironmentValues 종류
- editMode
- colorScheme
- timeZone
- locale
- calendar
- layoutDirection
- sizeCategory
- undoManager
- 등등
@Environment
- propertyWrapper이며, environment 값을 읽을 때 사용
- EnvironmentValues를 사용할 때 @Environment를 이용
import SwiftUI
struct ContentView: View {
@Environment(\.colorScheme) var colorScheme: ColorScheme
var body: some View {
if colorScheme == .dark {
Text("dark!")
.padding()
} else {
Text("white!")
.padding()
}
}
}
EnvironmentKey
- Environment를 커스텀하여, 시스템에서 제공해주는 것 뿐만이 아닌 직접 변수를 추가하여 사용이 가능
ex) primaryColor 환경변수 값 만들기
- Key 추가
- EnvironmentKey를 상속받고, defaultValue를 선언
// 1. EnvironmentKey를 상속
private struct MyColorKey: EnvironmentKey {
// 2. defaultValue로 해당 키에 대한 기본값을 지정하고 값의 타입을 결정
static let defaultValue = Color(.blue)
}
- EnvironmentValues 추가
- extension을 이용하여 EnvironmentValues에 직접 접근이 가능할 이름의 computed property를 선언
extension EnvironmentValues {
var primaryColor: Color {
get { self[MyColorKey.self] }
set { self[MyColorKey.self] = newValue }
}
}
- 사용하는 쪽
- 위에서 선언한 primaryColor를 이용하여 사용
struct ContentView: View {
@Environment(\.primaryColor) var myColor: Color
var body: some View {
Text("dark!")
.foregroundColor(myColor)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
* 참고
https://developer.apple.com/documentation/swiftui/environmentvalues
https://developer.apple.com/documentation/swiftui/environment
https://developer.apple.com/documentation/swiftui/environmentkey
'iOS 튜토리얼 (SwiftUI)' 카테고리의 다른 글
Comments