8bitzz / blogs

0 stars 0 forks source link

Difference between @State, @StateObject, @EnvironmentObject, @ObservedObject, @Binding, @AppStorage, @Published and ObservableObject #35

Open 8bitzz opened 1 year ago

8bitzz commented 1 year ago

Example code with explanation

@StateObject

struct ContentView: View {
    @StateObject var person = Person()

    var body: some View {
        VStack {
            PersonView(person: person)
            PersonEditorView(person: $person)
        }
    }
}

How to propagate changes from a child view to its parent view

@ Binding

struct PersonEditorView: View {
    @Binding var person: Person

    var body: some View {
        TextField("Enter name", text: $person.name)
    }
}

ObservableObject, @Published, and @ObservedObject

import SwiftUI

class Person: ObservableObject {
    @Published var name: String = "John"
}

struct PersonView: View {
    @ObservedObject var person: Person

    var body: some View {
        Text(person.name)
    }
}

ObservableObject