forked from aparoksha/adwaita-swift
Faciliate access to properties of a binding
This commit is contained in:
parent
8911cc8f42
commit
eea842891e
@ -38,6 +38,7 @@
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
@propertyWrapper
|
@propertyWrapper
|
||||||
|
@dynamicMemberLookup
|
||||||
public struct Binding<Value> {
|
public struct Binding<Value> {
|
||||||
|
|
||||||
/// The value.
|
/// The value.
|
||||||
@ -64,6 +65,17 @@ public struct Binding<Value> {
|
|||||||
/// The closure for settings the value.
|
/// The closure for settings the value.
|
||||||
private let setValue: (Value) -> Void
|
private let setValue: (Value) -> Void
|
||||||
|
|
||||||
|
/// Get a property of any content of a `Binding` as a `Binding`.
|
||||||
|
/// - Parameter dynamicMember: The path to the member.
|
||||||
|
/// - Returns: The binding.
|
||||||
|
public subscript<Subject>(dynamicMember keyPath: WritableKeyPath<Value, Subject>) -> Binding<Subject> {
|
||||||
|
.init {
|
||||||
|
wrappedValue[keyPath: keyPath]
|
||||||
|
} set: { newValue in
|
||||||
|
wrappedValue[keyPath: keyPath] = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Initialize a property that is bound from a parent view.
|
/// Initialize a property that is bound from a parent view.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - get: The closure for getting the value.
|
/// - get: The closure for getting the value.
|
||||||
|
|||||||
@ -131,6 +131,13 @@ struct ChangeTextView: View {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you have a more complex type and want to pass a property of the type as a binding,
|
||||||
|
you can just access the property on the binding.
|
||||||
|
|
||||||
|
```swift
|
||||||
|
HelloView(text: $complexType.text)
|
||||||
|
```
|
||||||
|
|
||||||
Whenever you modify a state property (directly or indirectly through bindings),
|
Whenever you modify a state property (directly or indirectly through bindings),
|
||||||
the user interface gets automatically updated to reflect that change.
|
the user interface gets automatically updated to reflect that change.
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user