-
[Swift] State์ Binding์ด ๋ฌด์์ผ๊น?๐ปProgramming/Swift 2024. 3. 18. 17:19
Property Mapper(@)
ํ๋กํผํฐ๊ฐ ์ ์ฅ๋๋ ๋ฐฉ์์ ๊ด๋ฆฌํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐ์์ผ ์ฃผ๋ ๊ฒ.(์ฌ์ฌ์ฉ ๊ฐ๋ฅ)
@State
SwiftUI์ ์ํด ๊ด๋ฆฌ๋๋ property wrapper ํ์
๋ณ์๊ฐ ๋ณ๊ฒฝ๋ ๋, View์์๋ update ๋๋ฉด์ ๊ฐ์ด ๋ณ๊ฒฝ๋๊ธธ ์ํ ๋ ์ฌ์ฉ.
@State ์ฌ์ฉ
struct StateBasic: View { // property @State var backgroundColor: Color = Color.green @State var myTitle: String = "์์ง ๋ฒํผ ์๋๋ฆผ" @State var count: Int = 0 }
์ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅ.
HStack (spacing: 20) { Button { // action backgroundColor = .red myTitle = "1๋ฒ ๋ฒํผ ๋๋ฆผ" count += 1 // count = count + 1 } label: { Text("1๋ฒ ๋ฒํผ") } Button { // action backgroundColor = .purple myTitle = "2๋ฒ ๋ฒํผ ๋๋ฆผ" count -= 1 } label: { Text("2๋ฒ ๋ฒํผ") } }
์ด์ ๊ฐ์ด ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๊ฒ ๋๋ฉด,
ํ๋ฉด์ ๊ด๋ จ๋ ์ค์ ์ ํด์ฃผ์ง ์์๋ ๋ฐ๋ก ๋ณ๊ฒฝ๋๋ค.
@State ์ฌ์ฉ ๊ฒฐ๊ณผ
๋ฒํผ์ ๋๋ ์ ๋ ๋ณ๊ฒฝ๋ ๊ฐ์ด ๋ฐ๋ก ํ๋ฉด์ ๋ฐ์๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
@Binding
@State๋ฅผ @SubView(ํ์ ๋ทฐ)์์ ์ฌ์ฉํ๊ธฐ ์ํ Wrapper
@Binding ์ค์ต
ํ์ ๋ทฐ ์ฝ๋
import SwiftUI struct BindingChild: View { // property @State var buttonColor: Color = Color.blue @Binding var backgroundColor: Color @Binding var title: String var body: some View { Button { // action backgroundColor = .orange buttonColor = .pink title = "Binding Child View" } label: { Text("Child View ์ด๋") .foregroundColor(.white) .padding() .padding(.horizontal) .background(buttonColor) .cornerRadius(10) } } }
์์ ์ฝ๋์์ ๋๊ฒจ์ค ๋ณ์์ @Binding์ ๋ถ์ธ๋ค. ์ด ๋, ์์ ์ฝ๋์์ ๋๊ฒจ์ฃผ๋ ๋ณ์๋ช ๊ณผ ํ์ ์ฝ๋์ @Binding ๋ณ์์ ์ด๋ฆ์ ๊ฐ์์ผํ๋ค.
ํ์ ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ์์ ๋ทฐ ์ฝ๋
struct BindingBasic: View { // property @State var backgroundColor: Color = Color.green @State var title: String = "Binding Basic View" var body: some View { ZStack { // background backgroundColor .ignoresSafeArea() // content VStack { Text(title) // button // parameter๋ก @State์ ๊ฐ์ $๋ฅผ ๋ถ์ฌ์ค๋ค. BindingChild(backgroundColor: $backgroundColor, title: $title) } } } }
์ BindingChild ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ ๋ ๊ฒ ํ๋ผ๋ฏธํฐ๋ก @State์ ๋ณ์๋ช ์ $๋ฅผ ๋ถ์ฌ์ฃผ์ด์ ํ์ ๋ทฐ์ ๋๊ฒจ์ค๋ค.
@Binding ์ฌ์ฉ ๊ฒฐ๊ณผ
ํ์ ๋ทฐ์ ๋๊ฒจ์ค title๊ณผ backgroundColor๊ฐ ํ์ ๋ทฐ์ ๋ฒํผ ์ก์ ์ ํตํด ์์ ๋ทฐ์ ๊ฐ๋ค์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
'๐ปProgramming > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Sheet๊ณผ FullScreenCover, NavigationView (0) 2024.03.20