Skip to content
DeveloperMemos

How to Use @Binding Property Wrapper in SwiftUI

SwiftUI, Binding1 min read

SwiftUI is a declarative framework that enables developers to build complex user interfaces with ease. One of the key features of SwiftUI is its use of property wrappers to manage state and data flow. In this post, we will explore one such property wrapper, @Binding, which enables us to create a two-way connection between views and their underlying data sources.

What is @Binding?

@Binding is a property wrapper that allows us to create a reference to a mutable value. It creates a two-way connection between the view and the underlying data source, allowing changes made in one place to be reflected in the other. This makes it ideal for managing state across different views or components within a single view.

How to Use @Binding

To use @Binding, we first define a variable with the @State property wrapper in the parent view that will act as the data source. We then pass this variable down to the child view as a binding parameter. The child view can then use this binding parameter to manipulate the data source and reflect any changes made back to the parent view.

Let's look at an example. Suppose we have a simple app with a counter that can be incremented and decremented using two buttons. Here's how we would implement this using @Binding:

1struct ContentView: View {
2 @State var count = 0
3
4 var body: some View {
5 VStack {
6 Text("Count: \(count)")
7
8 CounterButton(title: "Decrement", action: { self.count -= 1 })
9 CounterButton(title: "Increment", action: { self.count += 1 })
10 }
11 }
12}
13
14struct CounterButton: View {
15 var title: String
16 var action: () -> Void
17
18 var body: some View {
19 Button(action: action) {
20 Text(title)
21 }
22 }
23}

Here, we define a variable count with the @State property wrapper in the parent ContentView. We then pass this variable down to the child CounterButton view as a binding parameter. The CounterButton view uses this binding parameter to update the value of count in the parent view by calling the appropriate action function.

In conclusion, @Binding is a powerful property wrapper that enables two-way data flow between views and their underlying data sources. By using @Binding, you can create reactive UIs that automatically update in response to changes in your data, resulting in a more seamless user experience.