Jupyo's Daily Story
@Binding 본문
728x90
반응형
@Binding
은 SwiftUI에서 부모 뷰와 자식 뷰 간에 상태를 공유할 수 있도록 도와주는 프로퍼티 래퍼입니다. @State
가 뷰 내부에서 상태를 관리한다면, @Binding
은 이 상태를 다른 뷰로 전달하고 공유할 수 있도록 합니다. 즉, @Binding
을 사용하면 자식 뷰가 부모 뷰의 상태를 직접 수정할 수 있습니다.
기본 개념
- 상태 전달:
@Binding
은 부모 뷰에서 관리되는@State
변수의 참조를 자식 뷰에 전달합니다. 이를 통해 자식 뷰는 해당 상태를 읽고 수정할 수 있으며, 부모 뷰도 이 변경 사항을 감지하여 UI를 업데이트할 수 있습니다. - 양방향 데이터 흐름:
@Binding
은 데이터가 부모에서 자식으로 전달되는 것뿐만 아니라, 자식에서 부모로도 영향을 미치는 양방향 데이터 바인딩을 가능하게 합니다.
사용 방법
- 부모 뷰에서 상태 선언: 부모 뷰에서는
@State
로 상태를 선언합니다. - 자식 뷰로 전달: 부모 뷰는 자식 뷰에
@State
변수를$
(바인딩 연산자)를 사용하여 전달합니다. - 자식 뷰에서
@Binding
사용: 자식 뷰는@Binding
으로 부모의 상태를 참조하여 값을 변경하거나 사용할 수 있습니다.
코드 예시
부모 뷰
struct ParentView: View {
@State private var isOn = false
var body: some View {
ToggleView(isToggled: $isOn)
}
}
@State
로isOn
변수를 선언하고,ToggleView
라는 자식 뷰에$isOn
을 전달합니다.$
는@State
변수를@Binding
으로 전달하는 것을 의미합니다.
자식 뷰
struct ToggleView: View {
@Binding var isToggled: Bool
var body: some View {
Toggle(isOn: $isToggled) {
Text("Toggle me!")
}
}
}
- 자식 뷰는
@Binding
을 사용하여 부모 뷰로부터 전달받은 상태를 참조합니다. 여기서isToggled
는 부모의isOn
상태와 동기화됩니다.
주요 특징
- 양방향 동기화: 자식 뷰에서
@Binding
변수를 수정하면, 부모 뷰의@State
변수도 동시에 업데이트됩니다. 이로 인해 부모 뷰와 자식 뷰가 상태를 공유하고 동일한 데이터 기반으로 UI를 업데이트할 수 있습니다. - 변수의 수정 권한:
@Binding
은 읽기와 쓰기가 모두 가능합니다. 따라서 자식 뷰에서 해당 값을 수정하면 부모의 상태도 즉시 반영됩니다. - 값 전달이 아닌 참조:
@Binding
은 값 복사가 아닌 참조를 전달합니다. 따라서 부모와 자식이 동일한 메모리 공간에서 값을 공유하는 형태입니다.
@State
와의 차이점
@State
는 해당 뷰가 상태를 직접 관리할 때 사용되며, 뷰 내부에서만 상태가 변경됩니다.@Binding
은 다른 뷰에서 관리하는 상태를 참조하고 수정할 수 있도록 해줍니다. 즉, 상태는 부모 뷰에서 관리하고, 자식 뷰에서는 그 상태에 접근만 하도록 하는 것입니다.
실제 사용 예
다음 예시는 ParentView
에서 @State
로 토글 상태를 관리하고, ToggleView
에서 이를 변경할 수 있게 하는 구조입니다.
struct ParentView: View {
@State private var isOn = false
var body: some View {
VStack {
ToggleView(isToggled: $isOn)
Text(isOn ? "On" : "Off")
}
}
}
struct ToggleView: View {
@Binding var isToggled: Bool
var body: some View {
Toggle(isOn: $isToggled) {
Text("Toggle me!")
}
}
}
이 코드를 실행하면, ToggleView
에서 토글을 조작할 때마다 부모 뷰의 텍스트가 업데이트됩니다. 이처럼 @Binding
은 자식 뷰에서 상태를 수정하고, 그 변경 사항이 부모 뷰에 실시간으로 반영되도록 해줍니다.
결론
@Binding
은 부모와 자식 뷰 간의 상태를 공유하는 데 유용한 도구로, 부모에서 관리되는 상태를 자식 뷰에서 수정할 수 있게 만들어줍니다. 이를 통해 SwiftUI에서는 보다 유연한 상태 관리와 UI 동기화가 가능합니다.
반응형
'SwiftUI' 카테고리의 다른 글
@Published (0) | 2024.09.22 |
---|---|
@ObservedObject (0) | 2024.09.21 |
@StateObject (0) | 2020.10.15 |
ObservableObject (0) | 2020.10.15 |
@State (0) | 2020.10.15 |