How can I setup state in SwiftUI with a parameter ?

Generated on 8/2/2024

1 search

To set up state in SwiftUI with a parameter, you can use the @State property wrapper to create an internal source of data for a view. SwiftUI manages the storage and provides it back for the view to read and write. Additionally, you can use @Binding to create a two-way reference to the state of another view.

Here's an example from the SwiftUI essentials session:

  1. Using @State:

    struct RatingView: View {
        @State private var rating: Int = 0
    
        var body: some View {
            VStack {
                Text("Rating: \(rating)")
                HStack {
                    Button("Increase") {
                        rating += 1
                    }
                    Button("Decrease") {
                        rating -= 1
                    }
                }
            }
        }
    }
    
  2. Using @Binding:

    struct RatingView: View {
        @Binding var rating: Int
    
        var body: some View {
            VStack {
                Text("Rating: \(rating)")
                HStack {
                    Button("Increase") {
                        rating += 1
                    }
                    Button("Decrease") {
                        rating -= 1
                    }
                }
            }
        }
    }
    
    struct RatingContainerView: View {
        @State private var rating: Int = 0
    
        var body: some View {
            RatingView(rating: $rating)
        }
    }
    

In the example above, RatingView uses @Binding to receive a reference to the state from its parent view, RatingContainerView. This way, the state is managed by the container view, and any changes in the RatingView will be reflected in the RatingContainerView.

For more details, you can refer to the SwiftUI essentials session.