@State
- View의 로컬 상태를 정의하고 관리하기 위해 사용
- 뷰 내에서 어떤 값이 자주 변경되지만, 그 값이 그 뷰에서만 사용될 때
* View를 로컬 상태로 정의한다?
- 로컬: "이 뷰"에만 관련된다는 의미. 즉, 다른 화면이나 앱의 다른 부분에서는 해당 뷰의 데이터 변화를 신경쓰지 않아도 됨
- 상태: 변화할 수 있는 정보
- 정의한다: 이 뷰에서 데이터가 어떻게 시작되고 어떻게 변화하는지 결정
→ 뷰가 해당 뷰에서만 중요한 정보(상태)를 관리하고, 그 상태가 어떻게 변화할지를 정한다는 의미!
- @State로 선언된 변수를 통해 해당 뷰가 Single Source of Truth가 됨!
→ 그 뷰가 State의 원본이자 소유자. State는 해당 뷰 내에서만 유지되며 다른 곳에서 직접 접근할 수 없음
@Binding
- State를 여러 뷰에서 공유할 때 사용
- State의 Single Source of Truth를 유지하면서도, 하위 뷰가 상위 뷰의 상태를 수정할 수 있도록 함
- @Binding은 실제 상태 값을 소유하지 않고, 다른 뷰에서 관리되는 @State의 참조(reference)
→ 원본 상태의 복제를 방지하고, Single Source of Truth의 원칙을 유지
import SwiftUI
struct ParentView: View {
// text는 ParentView에서 관리되는 상태
@State private var text: String = "Hello, World!" // Single Source of Truth
var body: some View {
VStack {
Text("Parent View: \(text)")
ChildView(text: $text) // @Binding을 통해 상태를 하위 뷰에 전달
}
}
}
struct ChildView: View {
// @Binding을 통해 ParentView의 text 상태에 대한 참조를 받음
// 상태는 여전히 ParentView에서 관리되지만 ChildView에서 수정될 수 있음
@Binding var text: String // @Binding으로 전달된 상태
var body: some View {
TextField("Enter text", text: $text) // TextField에서 상태를 수정
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
}
- 상태는 한 곳(ParentView)에서만 관리되며, 중복없이 여러 뷰(ChildView)에서 사용할 수 있음
→ Single Source of Truth의 원칙을 유지하면서 뷰 간의 상태 공유를 가능하게 함
[참조 자료]
Data Flow Through SwiftUI - WWDC19 - Videos - Apple Developer
SwiftUI was built from the ground up to let you write beautiful and correct user interfaces free of inconsistencies. Learn how to connect...
developer.apple.com
NavigationStack, NavigationPath and navigationDestination (0) | 2024.08.19 |
---|---|
ObservableObject, @ObservedObeject, @StateObject, @EnvironmentObject (0) | 2024.08.12 |
[Swift] 좋은 데이터 구조 (feat. chatGPT) (0) | 2024.07.06 |
[Swift] ERD(Entity Relationship Diagram) (0) | 2024.07.06 |
[Dev_Pathway] Customize views with properties : Structures and Classes (0) | 2024.07.03 |
댓글 영역