๋ฐ์ดํฐ๋ฐ์ธ๋ฉ
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ(data binding)์ ์ ๊ณต์์ ์๋น์๋ก๋ถํฐ ๋ฐ์ดํฐ ์๋ณธ์ ๊ฒฐํฉ์์ผ ์ด๊ฒ๋ค์ ๋๊ธฐํํ๋ ๊ธฐ๋ฒ์ด๋ค.
๋ผ๊ณ ์ํค๋ฐฑ๊ณผ๊ฐ ๋งํ๋๋ฐ, ์ฝ๊ฒ๋งํด
SwiftUI์์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ view์ ๋ณด์ฌ์ค ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ์์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ์ธ๋ฉํ๋ ๋ฐ์ดํฐ์ ์ข ๋ฅ๋ ๋ค์ํ๊ณ ๊ทธ ์ฉ๋๊ฐ ๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ์ธ๋ฉ ํ๋ ๋ฐฉ๋ฒ๋ ๋ค์ํฉ๋๋ค.
IOS ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ swift์์ ์ตํ ์ฌ์ฉํ๋๋๋ก ํ๋กํผํฐ๋ฅผ ์ ์ธํ๊ณ ์์ ํ๋ฉด ์๋ฌ๊ฐ ๋๋๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ ์ด์ ์ ๋์ฒด ํค์๋์ธ @State์ ๋ํด์ ์์๋ณด์
์ ์๋ฌ๊ฐ ๋๋๊ฐ?
์๋ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ธ ContentView ํํ๋ก ๋ฒํผ์ ๋๋ฅด๋ฉด str์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ์ฝ๋์ ๋๋ค.
ํ์ง๋ง ์๋ ์ฝ๋๋ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
struct ContentView: View {
var str = "A"
var body: some View {
VStack{
Text(str)
Button("B๋ก ๋ณ๊ฒฝ"){
str = "B"
}
}
}
}
swiftUI์์ View๋ struct๋ก ๋์ด์์ต๋๋ค.
๊ตฌ์กฐ์ฒด๋ ๋ง ๊ทธ๋๋ก ๊ตฌ์กฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅ ํ๋ฏ๋ก ์๋ฌ๊ฐ ๋ฉ๋๋ค !!
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด @State๊ฐ ํ์ํ๋ฐ์,
@State
SwiftUI์์ ๊ฐ์ ์ฝ๊ณ ์ธ ์ ์๋ ์ด์ฉ๊ตฌ ์ ์ฉ๊ตฌ ๋ผ๊ณ ๋์ด ์๋๋ฐ,
@State๋ ํ๋กํผํฐ์ ๊ฐ์ ๋ณํํ ์ ์๊ณ ๋ณํ ๋ ๋ง๋ค View๋ฅผ ์ ๋ฐ์ดํธ ํฉ๋๋ค. ํ๋กํผํฐ ์์ @State๋ง ๋ถ์ฌ์ฃผ๋ฉด ๋จ
@State var str = "A"
๐ก @State๋ private์ด๊ณ ๋ค๋ฅธ View์ ๊ณต์ ๋์ง ์์ต๋๋ค.
์์์ ์๋ฌ๊ฐ ๋ฌ๋ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ๋ฉด,
struct ContentView: View {
@State var str = "A"
var body: some View {
VStack{
Text(str)
Button("B๋ก ๋ณ๊ฒฝ"){
str = "B"
}
}
}
}
Binding<String>
์ฃผ๋ก ์ฌ์ฉ์๊ฐ ํด๋น ๋ฐ์ดํฐ์ ์ง์ ์ ๊ทผํด์ผํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. (ex. Toggle, TextEditer, TextField ...)
์์๋ก ํ ๊ธ ๋ฒํผ์ ์ฌ์ฉํ ๋ isOn ํ๋ผ๋ฏธํฐ์ ๋ํด์ Binding ๊ฐ์ ๋ฃ์ด์ฃผ์ด์ผ ํฉ๋๋ค.
๋ฐ์ธ๋ฉํ ํ๋กํผํฐ ์์ $(๋ฌ๋ฌ) ํ์๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
struct ContentView: View {
@State var toggle = false
var body: some View {
VStack{
Text(toggle.description)
Toggle("ํ ๊ธ๋ฒํผ", isOn: $toggle)
}
}
}
'๐ฑ iOS > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๋ฐ์ด์ค ํ๋ฉด๊ณ ์ portrait only (0) | 2022.07.25 |
---|---|
[SwiftUI] Grid์์ฑ (0) | 2022.07.05 |
URLSession์ ํตํดJSON ๊ฐ์ ธ์ค๊ธฐ (2) (0) | 2022.07.04 |
URLSession์ ํตํดJSON ๊ฐ์ ธ์ค๊ธฐ (1) (0) | 2022.06.28 |
Auto Layout 1 [Why?] (0) | 2022.05.31 |