[SwiftUI] EnvironmentKey
environment에 있는 values에 접근하기 위한 key
원본 : https://developer.apple.com/documentation/swiftui/environmentkey
목적 : 꼼꼼한 학습을 위한 번역 및 정리
Declaration
protocol EnvironmentKey
Overview
새로운 property와 함께 EnvironmentValues
structure를 확장하여 custom environment value를 생성할 수 있다. 첫 번째로, defaultValue
property를 지정하고 새로운 environment key type을 정의해라.
private struct MyEnvironmentKey: EnvironmentKey {
static let defaultValue: String = "Default value"
}
Swift compiler는 관련된 value type을 default value에 대해 저정한 유형으로 자동으로 추론한다.
그런 다음 새로운 environment value property를 정의하기 위해 key를 사용해라.
extension EnvironmentValues {
var myCustomValue: String {
get { self[MyEnvironmentKey.self] }
set { self[MyEnvironmentKey.self] = newValue }
}
}
너의 environment value의 clients(이게 뭘 의미하는지 모르겠음.)는 직접적으로 절대 그 key를 사용하지 않는다. 대신에, 그들은 너의 custom environment value property의 key path를 사용한다.
view 그리고 모든 subviews를 위해 environment value를 설정하기 위해서, 해당 view에 environment(_: _:)
view modifier를 추가해라.
MyView()
.environment(\.myCustomValue, "Another string")
편의상, 이 environment value를 공급하기 위해 전용 view modifier를 정의할 수 있다.
extension View {
func myCustomValue(_ myCustomValue: String) -> some View {
environment(\.myCustomValue, myCustomValue)
}
}
이것은 call하는 곳에서 명료함을 개선한다.
MyView()
.myCustomValue("Another string")
MyView 또는 그의 자식 중 하나에서부터 그 value를 읽기 위해선, Environment
property wrapper를 사용해라.
struct MyView: View {
@Environment(\.myCustomValue) var customValue: String
var body: some View {
Text(customValue)
}
}