์์ ์ฝ๋
struct ContentView: View {
@State private var count = 0
@State private var isOne = false
var body: some View {
VStack {
Button("๋ฒํผ ๋๋ฆฐ ํ์ \(count)") {
self.count += 1
}
Toggle(isOn: $isOne) {
Text("ํ ๊ธ ์ํ \(isOne ? "on" : "off")")
}
}
}
}
SwiftUI์์ View ๋จ์์ ๊ฐ๋จํ ๊ฐ์ State๋ฅผ ์ฌ์ฉํด์ ๊ด๋ฆฌํ๋๋ฐ ์ด๋ Button์ State์ ์ ๊ทผํ๊ธฐ ์ํด self๋ฅผ ์ฌ์ฉํ๊ณ Toggle์ ๋ฌ๋ฌ ์ฌ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ ์์ ์๋ค.
์ฌ์ค ๊ฐ๊ฐ ํ๋กํผํฐ์ ์ ๊ทผํ ๋ ์ญํ ๊ณผ ์์น๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
State์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ด ๊ฐ๊ณผ ๊ด๋ จ์๋ ๋ทฐ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๊ฒ ๋๋ค. ์ด๋ ์ด State์ ๊ฐ์ ๋ฐ์ํ์ฌ View๊ฐ ํ๋ฉด์ ๊ฐฑ์ ๋๋ค. dollar sign(๋ฌ๋ฌ ์ฌ์ธ : ์ดํ $) ๋ ์์ฑ์ ๊ฐ์ ์ ๊ทผํ ์ ์๋๋ก ํ๊ณ ์ด๋ฅผ "ํ๋ก์ ์ "์ด๋ผ๊ณ ํ๋ค.
Toggle์ ๋ณด๋ฉด isOn ์ธ์๋ก Binding์ ์ ๋ฌํด์ผ ํจ์ ์ ์ ์๋๋ฐ $๊ธฐํธ๋ฅผ ์ฌ์ฉํด์ State ๊ฐ์ ์ ๊ทผํ๊ฒ ๋๋ฉด SwiftUI๋ Binding ํ์ ์ ๋ฐํํ๊ฒ ๋๋ค.
Binding์ ๊ฐ์ ์ ์ฅ์๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ฝ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ๋ฐ๊พธ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ Toggle์ isOn์๋ State๋ฅผ ๋ฌ๋ฌ์ฌ์ธ์ผ๋ก ์ ๋ฌํ๊ฒ ๋๋ค.
Button์ ๋ณด๋ฉด action ์ธ์๋ ํด๋ก์ ธ๋ก ์ ๋ฌ๋๋ค. ์ฆ Binding์ด ํ์ํ ๊ฒ์ด ์๋ action ํด๋ก์ ธ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด๋ค.
์ด๋ ํด๋ก์ ธ๋ View์ body์๋ ๋ณ๋์ Context์์ ์คํ๋๋ค. ๋์ผํ Context๊ฐ ์๋๊ธฐ ๋๋ฌธ์ State๋ Binding์ ์์ฑํ์ง ์๋๋ค.
์ด๋ฐ ๊ฒฝ์ฐ State ๋ณ์์ ์ง์ ์ ๊ทผํ์ฌ ๊ฐ์ ๋ณ๊ฒฝํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ self๋ก ์ ๊ทผํ๋ค.
์ฌ์ค ์ด๊ฑฐ ChatGPT์์ ์๋ ค์คซ์ด์ ๐ ์ ์ฐ๋ฉด ๊ณต๋ถ๋ ์ฝ๋ฉํ๋๋ฐ ์์ฒญ ๋์์ด ๋ ๋ฏ ํฉ๋๋ค.
(๊ทธ๋ฅ ํผ์๋ง ์ฝ๊ณ ๋์ด๊ฐ๋ ค๋ค๊ฐ ChatGPT ์ฑ๋ฅ๋ณด๊ณ ๊ฐํํด์ -๊ฑฐ์ฆ ์ ํ๋ฌธ์ ๊น๋ ๋ฒ์ญ- ์ ๋ฆฌํด์ ๋ธ๋ก๊ทธ์ ๋ค์ ์ ์)
์ฌ๊ฐํ ๋ฌธ์ ์ค ํ๋๋ ์ถ์ฒ๊ฐ ๋ถ๋ถ๋ช ํจ.. ์ถ์ฒ ํ๊ธฐ ํด์ผ ํ๋๋ฐ...๋ฌธ์ ์ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค!
์ฐธ๊ณ ์ฌ์ดํธ
'iOS ๐ > Property wrapper' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Advanced SwiftUI] @Environment PropertyWrapper ์์๋ณด๊ธฐ (0) | 2023.10.29 |
---|---|
[iOS/SwiftUI] @Published, ObservableObject, ObservedObject (0) | 2023.04.03 |
[iOS/SwiftUI] @State with dollar sign (two-way binding) (0) | 2023.03.18 |
[iOS/SwiftUI] @State (0) | 2023.03.15 |