728x90
728x90
Environment
A property wrapper that reads a value from a view’s environment.
@Environment ๋ SwiftUI ๋ทฐ ๋ด์์ ์ฑ์ ์ ์ญ์ ์ธ ์ํ์ ์์ฑ์ ์ ์ฅํ๊ณ ๊ณต์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋กํผํฐ ๋ํผ์ด๋ค.
- ํด๋น ๋ํผ๋ฅผ ์ฌ์ฉํ๋ฉด SwiftUI ๊ฐ ํด๋น ๊ฐ์ ์ก์ธ์คํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ์๋์ผ๋ก ๊ฐ์งํด์ ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
- Environment ํค๋ฅผ ์ฌ์ฉ์ ์ ์ํด์ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ฑ ์ ์ญ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ, ์ค์ , ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ์ ์ฅ์ ์ ์ฉํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ Environment ํค
https://developer.apple.com/documentation/swiftui/environmentvalues
- \.dismiss: ๋ชจ๋ฌ๋ก ์ด๋ ค์๋ ๋ทฐ๋ฅผ ๋ซ๊ธฐ ์ํ ๊ฐ
- \.colorScheme: ๋ผ์ดํธ ๋๋ ๋คํฌ๋ชจ๋์ธ์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ
- \.locale: ์ธ์ด ๋ฐ ์ง์ญ ์ค์ ์ ๋ํ๋ด๋ ๊ฐ
- \.calendar: ๋ฌ๋ ฅ์ ๋ํ๋ด๋ ๊ฐ
- \.timeZone: ์๊ฐ๋๋ฅผ ๋ํ๋ด๋ ๊ฐ
- \.layoutDirection: ๋ ์ด์์ ๋ฐฉํฅ (์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ)์ ๋ํ๋ด๋ ๊ฐ.
dismiss ํค ์์
private struct SheetContents: View {
@Environment(\.dismiss) private var dismiss
var body: some View {
Button("Done") {
dismiss()
}
}
}
์ฌ์ฉ์ ์ ์ key ๋ง๋๋ ์์
https://developer.apple.com/documentation/swiftui/environmentkey
- EnvironmentKey ํ๋กํ ์ฝ์ ์ฑํํ๋ ์ปค์คํ
ํค๋ฅผ ์์ฑํ๋ค.
- defaultValue ์์ฑ์ ํด๋น ํค์ ๊ธฐ๋ณธ๊ฐ
- EnvironmentValues ์ extension ์ผ๋ก ์์ ์์ฑํ ์ปค์คํ ํค์ ์ ๊ทผํ ๊ฐ์ ๋ง๋ ๋ค.
private struct MyEnvironmentKey: EnvironmentKey {
static let defaultValue: String = "Default value"
}
extension EnvironmentValues {
var myCustomValue: String {
get { self[MyEnvironmentKey.self] }
set { self[MyEnvironmentKey.self] = newValue }
}
}
- environment(_:_:) view modifier ๋ฅผ ์ด์ฉํด์ ๋ทฐ ๊ณ์ธต์ Environment ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ ์ ์๋ค.
MyView()
.environment(\.myCustomValue, "Another string")
- Environment ์ปค์คํ ํค๋ฅผ ์์ฑํ ํ์๋ @Environment ํ๋กํผํฐ ๋ํผ๋ฅผ ์ฌ์ฉํด์ ์ ๊ทผํ ์ ์๋ค.
struct ContentView: View {
@Environment(\.myCustomKey) var customValue
var body: some View {
Text(customValue)
}
}
View Modifier ๋ฅผ ์ด์ฉํด์ ์กฐ๊ธ ๋ ๊ฐ๋จํ๊ฒ ์ค์ ํ๋ ๋ฐฉ๋ฒ
- ์์ฑํ ์ปค์คํ ํค์ ๊ฐ์ ์ค์ ํ๋๋ก ํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์
extension View {
func myCustomValue(_ myCustomValue: String) -> some View {
environment(\.myCustomValue, myCustomValue)
}
}
- environment ๋ฅผ ์ฌ์ฉํ๋ ๋์ ์กฐ๊ธ ๋ ์ฌํํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
MyView()
.myCustomValue("Another string")
์ฐธ๊ณ ๋ฌธ์
728x90
728x90
'๐ iOS > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] SwiftUI - SignInWithAppleButton / ์ ํ ๋ก๊ทธ์ธ ์ปค์คํ ๋ฒํผ (0) | 2023.10.22 |
---|---|
[iOS] SwiftUI - GeometryReader / View ํฌ๊ธฐ์ ์ขํ ๊ณ์ฐํ๊ธฐ (1) | 2023.10.21 |
[iOS/SwiftUI] @ViewBuilder, @resultBuilder ๊ฐ ๋ฌด์์ผ๊น? (0) | 2023.06.07 |
[iOS] SwiftUI LazyVStack LazyHStack :: lazy load views (1) | 2022.06.07 |
[iOS] SwiftUI property wrapper @State @Binding (0) | 2022.06.02 |