๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/SwiftUI

[iOS/SwiftUI] @Environment ์•Œ์•„๋ณด๊ธฐ / ๋ชจ๋‹ฌ ๋ทฐ ๋‹ซ๊ธฐ dismiss ํ™œ์šฉ

by Danna 2023. 6. 15.
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 ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์กฐ๊ธˆ ๋” ์‹ฌํ”Œํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
728x90
728x90