Greetings, traveler!
Since we have discussed binding, let’s clarify Swift’s different options. iOS 17 and the new Observation framework gave us some new tools to consider, which widened our arsenal. So, let’s take a closer look at all of them once again.
State
Utilize the @State
property wrapper to manage a single source of truth for a SwiftUI view. Working with Observable
classes, you can mark their references as State objects. This will allow you to provide bindings to its properties.
struct SwiftUIView: View {
@State var name: String = ""
var body: some View {
TextField("", text: $name)
}
}
Binding
Use the @Binding
property wrapper to establish a two-way connection between a property and a view. It connects a property to a source of truth stored at another object.
struct SwiftUIView: View {
@State var name: String = ""
var body: some View {
SwiftUIView2(name: $name)
}
}
struct SwiftUIView2: View {
@Binding var name: String
var body: some View {
TextField("", text: $name)
}
}
Bindable
Utilize the @Bindable
to create bindings to mutable properties of an Observable
class. You can also use @Bindable
to make bindings for an Environment
object. You can read more about it here.
@Observable
final class Model {
var name: String = ""
}
struct SwiftUIView: View {
@State var model: Model
var body: some View {
SwiftUIView2(model: model)
}
}
struct SwiftUIView2: View {
@Bindable var model: Model
var body: some View {
TextField("", text: $model.name)
}
}
Conclusion
The release of the Observation framework has decreased the number of property wrappers, which is good news.
If you enjoyed this article, please feel free to follow me on my social media: