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๋ฅผ ์ฌ์ฉํ์ง ์์)
- 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