Hacking with Swift 사이트의 강좌 번역본입니다.
[원문 : https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-binding-property-wrapper]
What is the @Binding property wrapper?
@Binding은 SwiftUI에서 적게 사용되는 property wrappers중 하나 이지만, 여전히 엄청 중요합니다: 하나의 값이 실제로 다른곳에서 오고, 두 군데에서 모두 공유되어야 한다고 선언 하는 것입니다. 이것은 참조 타입이 잠재적으로 많은 뷰에서 공유되도록 설계된, @ObservedObject나 @EnvironmentObject와 같지 않습니다.
예를들어, 다음과 같이 자식(child) 뷰가 나타나거나 아닌지를 저장하는 @State property를 가진 ContentView가 있습니다.
struct ContentView: View {
@State private var showingAddUser = false
var body: some View {
VStack {
// your code here
}
}
.sheet(isPresented: $showingAddUser) {
// show the add user view
}
}
시트(sheet)의 isPresented 매개변수로 showingAddUser를 사용하며, 해당 Boolean이 true일때 사용자 뷰가 보여질 것입니다. 하지만, 필요한 경우 사용자 추가 뷰가 스스로 해제(dismiss)되도록 하려면 어떻게 해야 할까요? - 예를들어 Done 버튼을 사용자가 누른 경우입니다.
우리가 원하는 것은 사용자 추가 뷰에 showingAddUser를 다시 fase로 설정하는 것이며, ContentView가 그것을 숨길수 있을 것입니다. 이것이 @Binding의 정확한 용도입니다: 사용자 추가 뷰에서 이 값은 다른 곳에서 제공될 것이고, 우리와 다른 곳에서 공유될 것입니다라는 property를 만들 수 있습니다.
따라서, 다음과 같이 사용자 추가 뷰를 만들수 있습니다.
struct AddView: View {
@Binding var isPresented: Bool
var body: some View {
Button("Dismiss") {
self.isPresented = false
}
}
}
해당 property는 글자 그대로 isPresented라는 Boolean 값이 있지만, 다른 곳에 저장되어 있습니다. 따라서, 이전에 있던 주석 // show the add user view부분을 바꿔서 AddView를 만들때, 값을 제공해야 하므로 그것을 조작할 수 있습니다.
.sheet(isPresented: $showingAddUser) {
AddView(isPresented: self.$showingAddUser)
}
ContentView와 AddView 모두 같은 Boolean 값을 공유합니다 - 한 곳에서 변경하면 다른 곳에도 변경됩니다.
'SwiftUI > Appendix A' 카테고리의 다른 글
What is the @FetchRequest property wrapper? (0) | 2019.11.22 |
---|---|
What is the @GestureState property wrapper? (0) | 2019.11.22 |
What is the @Environment property wrapper? (0) | 2019.11.22 |
What is the @EnvironmentObject property wrapper? (0) | 2019.11.22 |
What is the @ObservedObject property wrapper? (0) | 2019.11.21 |
What is the @Published property wrapper? (0) | 2019.11.21 |
What is the @State property wrapper? (0) | 2019.11.21 |
Understanding property wrappers in Swift and SwiftUI (0) | 2019.11.21 |