SwiftUI to share data between the Views
Struggling to share data between views in SwiftUI?
SwiftUI provides way to share data across all views within app, using @EnviornmentObject
. This enables the app to update the views automatically whenever data changes.
@EnvironmentObject
and put into the environment object so that views B, C and D can automatically have access to it.By default an ObservableObject
synthesizes an objectWillChange publisher that emits the changed value before any of its @Published
properties changes.
Example
class Contact: ObservableObject {
@Published var name: String
@Published var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func haveBirthday() -> Int {
age += 1
return age
}
}
let john = Contact(name: "John Appleseed", age: 24)
john.objectWillChange.sink { _ in print("\(john.age) will change") }
print(john.haveBirthday())
// Prints "24 will change"
// Prints "25"