Intro

  • ํ˜„์žฌ ๋ทฐ์—์„œ ๋ณด์—ฌ์ง€๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ State๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ. 
  • ์ด ์ƒํƒœ์— ์˜ํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” UI๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ views are a function of their state ๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•จ (์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ฒ„ํŠผ์„ ๋น„ํ™œ์„ฑํ™” ์‹œํ‚ค๋Š” ๊ฒƒ๋„ state๋“ค์— ์˜ํ•ด ๋ทฐ๊ฐ€ ๊ด€๋ฆฌ๋˜๋Š” ๊ฒƒ)
  • SwiftUI๋Š” struct๋กœ ๊ตฌํ˜„๋œ view๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Swift์™€ UIKit์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ property๋ฅผ ์„ ์–ธํ•œ ๋’ค ๊ตฌ์กฐ์ฒด ์•ˆ์—์„œ ๊ทธ ๊ฐ’์„ ๋ฐ”๊ฟ€์ˆ˜ ์—†์Œ
  • ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ State๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ๊ฐ€์ง„ property wrapper๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • SwiftUI๋Š” ๋ทฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ์ผ์„ ์ž์ฃผ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ทฐ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์— ๋Œ€ํ•ด ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” State๋ฅผ ์‚ฌ์šฉํ•จ

 

@State ์•Œ์•„๋ณด๊ธฐ

  • ๋ทฐ์—์„œ ๊ฐ„๋‹จํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ ค ํ•  ๋•Œ ์‚ฌ์šฉ (view์˜ ์ „์ฒด life cycle์„ ๋”ฐ๋ผ ์˜๊ตฌ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” State๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)

์ถœ์ฒ˜ : ์• ํ”Œ developer ์‚ฌ์ดํŠธ

  • SwiftUI๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์‹œํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ์˜ํ–ฅ ๋ฐ›๋Š” ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•จ
  • ๋ฒ„ํŠผ ํ•˜์ด๋ผ์ดํŠธ ์ƒํƒœ, ํ•„ํ„ฐ ์„ค์ •, ํ˜„์žฌ ์„ ํƒ๋œ ๋ชฉ๋ก ๋“ฑ์˜ UI์— ์˜ํ–ฅ์„ ์ฃผ๋Š” state๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

์˜ˆ์‹œ

struct ContentView: View {
    @State private var isOn: Bool = false
    var body: some View {
        VStack {
            Toggle(isOn: $isOn) {
                Text(isOn ? "on" : "off")
            }
        }
        .padding()
    }
}
  • ํ† ๊ธ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ €์žฅ๋œ ๊ฐ’์— ์˜ํ•ด text๊ฐ€ on or off๋กœ ๋ณ€๊ฒฝ๋จ
  • Toggle์˜ isOn๊ฐ’๊ณผ State๋กœ ํ‘œ์‹œํ•œ isOne์ด ๋ฐ”์ธ๋”ฉ ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ
  • ์• ํ”Œ์—์„œ๋Š” @State๋ฅผ ์ •์˜ํ•  ๋•Œ private๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒํ•˜๊ณ  ์žˆ์Œ (๋ทฐ ๊ณ„์ธต์—์„œ ์บก์Аํ™”๋œ ์ƒํƒœ๋กœ ๊ฐ’์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ)
struct ContentView: View {
    @State private var count = 0
    
    var body: some View {
        Button("๋ฒ„ํŠผ ๋ˆŒ๋ฆฐ ํšŸ์ˆ˜ \(count)") {
            self.count += 1
        }
    }
}

 

 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ 

https://www.hackingwithswift.com/books/ios-swiftui/modifying-program-state

https://developer.apple.com/documentation/swiftui/state/