It appears that on iOS SwiftUI we can leverage pro...
# decompose
a
It appears that on iOS SwiftUI we can leverage property wrappers so that observing
Value
looks nicer. Details are in the thread.
We can define the following property wrapper:
Copy code
@propertyWrapper struct StateValue<T : AnyObject>: DynamicProperty {
    @ObservedObject
    private var obj: ObservableValue<T>

    var wrappedValue: T { obj.value }

    init(_ value: Value<T>) {
        obj = ObservableValue(value)
    }
}
And then instead of writing like this:
Copy code
struct CounterView: View {
    let counter: CounterComponent

    private var observableModel: ObservableValue<CounterComponentModel>
    private var model: CounterComponentModel { observableModel.value }

    init(_ counter: CounterComponent) {
        self.counter = counter
        observableModel = ObservableValue(counter.model)
    }

    var body: some View {
        ...
    }
}
We can write like this:
Copy code
struct CounterView: View {
    let counter: CounterComponent

    @StateValue
    private var model: CounterComponentModel

    init(_ counter: CounterComponent) {
        self.counter = counter
        _model = StateValue(counter.model)
    }

    var body: some View {
        ...
    }
}
What do you think? Are there any corner cases I'm missing?
a
not at my computer right now, but on the surface this looks great!
a
Seems working! Will update samples soon.