보면 ProfileEditor라는 자식 뷰가 있다.
여기서는 부모에게 Profile 자료형의 어떤 바인딩 상태를 받을 건데, 이걸 어떻게 주냐
struct ProfileEditor: View {
@EnvironmentObject var displayMode : DarkMode
@State private var counter = 0
// 부모뷰로부터 profile을 전달받음
@Binding var profile : Profile
..
.
.
.
.
.
}
자식이 @Binding 된 속성을 요구하고 있기 때문에 이 ProfileEditor라는 자식 뷰의 부모뷰인 ProfileHost는 해당 뷰가 가지고 있는 Profile 자료형의 @Binding 을 전달해야한다. 그래야 두 뷰가 상태를 공유하게 된다.
* 여기서 알아두면 좋은 것!
- Swift에서 달러기호 $는 !바인딩!을 의미한다.
- 상태값 자체가 아니라 그 상태 값에 대한 참조를 전달하는 것이다.
import SwiftUI
struct ProfileHost: View {
@State private var draftProfile = Profile.default
@Environment(ModelData.self) var modelData
@Environment(\.editMode) var editMode
@Environment(\.layoutDirection) var layoutDirection
var body: some View {
VStack(alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/, spacing: 20){
HStack{
Spacer()
EditButton()
}
if editMode?.wrappedValue == .inactive{
ProfileSummary(profile: draftProfile)
}else{
ProfileEditor(profile: $draftProfile)
}
}.padding()
}
}
#Preview {
ProfileHost()
.environment(ModelData())
}
이런식으로 전달할거다.
'Ios > Swift UI' 카테고리의 다른 글
프로퍼티 초기화 중에 다른 인스턴스 멤버를 직접 참조할 수 없습니다. (0) | 2024.07.26 |
---|---|
CloseRange (0) | 2024.07.26 |
@State, @Binding, @ObservedObject (0) | 2024.07.26 |
@Environment (0) | 2024.07.26 |
Swift UI 메서드 정리 ( 계속 추가 ) (2) | 2024.07.24 |