Arkadii Ivanov
05/09/2023, 8:29 PMValue
looks nicer. Details are in the thread.@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:
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:
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?Adam Brown
05/09/2023, 11:52 PMArkadii Ivanov
05/14/2023, 7:43 PM