iOS/SwiftUI

[SwiftUI] @State vs @Binding

CommitGuy 2024. 7. 2. 12:00

@State

- 값의 변경을 감지하고 뷰를 자동으로 Update하는데 사용된다

struct ContentView: View
{
    @State private var count = 0
    
    var body: some view
    {
    	VStack
        {
            Text("Count: \(count)")
            Button(action: { count += 1 })
        }
    }
}

 

@Binding

데이터의 양방향 바인딩을 구현하는데 사용, 뷰 간에 데이터를 공유하고 업데이트 하는데 사용

[특징]

1. 값의 참조: 값을 저장하지 않고 값의 참조를 저장, 부모 뷰와 자식 뷰가 같은 Data값을 참조

2. 양방향 데이터 흐름: 자식 뷰에서 값을 변경하면 해당 변경 사항이 부모 뷰로 전파되어 다른 연결된 View에도 영향을 줌

3. 데이터의 Sync: Data의 Sync를 자동으로 관리

4. 데이터 공유: Data를 여러 뷰 간에 공유할 수 있도록 해줌

struct ParentView: View
{
    @State private var toggleState = false
    
    var body: some View
    {
    	VStack
        {
            ChildView(isToggled: $toggleState)
        }
    }
}

struct ChildView: View
{
    @Binding var isToggled: Bool
    
    var body: some View
    {
    	Toggle(isOn: $isToggled)
    }
}

ChildView의 isToggled가 바뀌면 ParentView의 toggleState가 바뀜, @Binding이 값의 참조를 저장하기 때문

'iOS > SwiftUI' 카테고리의 다른 글

[SwiftUI] @StateObject vs @ObservedObject  (2) 2024.07.01