Send state variable data to a child view in SwiftUI

In this tutorial, we will learn how to send state variable data from a parent view to a child view in SwiftUI.

In SwiftUI app development transferring data from a parent view to a child view is a common requirement, especially state variable values.

SwiftUI provides a convenient way to manage state within views using @State and allows us to share this state between views using @Binding.

Now, follow the steps below to achieve this task.

Create a parent view

First of all, I will create a parent view called ContentView which will be our main view. Within this view, I will declare a state variable using the @State property wrapper. This variable will hold the data that we want to send to the child view.

Example

struct ContentView: View {
    
    // State variable to hold the message in the parent view
    @State private var message = "Hello from Parent View!"

    var body: some View {
        
        // Calling the ChildView and passing the message using Binding
        ChildView(message: $message)
        
    }
}

In the above program, I have declared a mutable state variable called message using the @State property wrapper. This variable holds the message that we want to display.

Then, in the body of the ContentView, I have called ChildView and passed a binding ($message) to the message state variable. This means that any changes made to message within ChildView will affect the original message state in ContentView.

Create the Child View with @Binding

Now, I will create the child view (ChildView) and within this child view I will declare a @Binding variable. The @Binding is another property wrapper provided by SwiftUI that creates a two-way connection between a parent and a child view.

Example

struct ChildView: View {
    
    // Binding variable to hold the reference to the message from the parent view
    @Binding var message: String

    var body: some View {
        
        // Displaying the text using the message received from the parent view
        Text(message)
        
    }
}

In the above code, I have declared a binding variable called message  using the @Binding property wrapper. This binding is used to create two-way connection with the message variable in the parent view. It will allow the child view to read and write to the message variable from the parent view.

Then, I have created a Text view to display the content of the message received from the parent view.

Have a look at the complete code below.

import SwiftUI

struct ContentView: View {
    
    // State variable to hold the message in the parent view
    @State private var message = "Hello from Parent View!"

    var body: some View {
        
        ChildView(message: $message)
        
    }
}

struct ChildView: View {
    
    // Binding variable to hold the reference to the message from the parent view
    @Binding var message: String

    var body: some View {
        
        Text(message)
        
    }
}

Output:

Send state variable data to a child view in SwiftUI

You may also read  Update parent view from child in SwiftUI

Leave a Reply

Your email address will not be published. Required fields are marked *