thoughtbot / CombineViewModel

An implementation of the Model-View-ViewModel (MVVM) pattern using Combine.
MIT License
59 stars 4 forks source link

It should be possible to initialise a @ViewModel property with a default value #19

Open sharplet opened 4 years ago

sharplet commented 4 years ago

Because we rely on the "enclosing self" subscript to hook into a view controller's viewDidLoad method, we can't use the more obvious syntax:

@ViewModel var counter = Counter()

This is a wrinkle that it would be nice to smooth out, but it would involve complicating the implementation. A possible approach:

  1. Swizzle -[UIViewController viewDidLoad] globally at load time to post our view did load notification.
  2. Eagerly observe all viewDidLoad notifications and use reflection to find @ViewModel properties.
  3. If any are found, start observing those objects and trigger updateView().

One downside of swizzling at the UIViewController level is that the viewDidLoad notification will often get posted before a subclass's viewDidLoad implementation has returned. This could result in some tricky issues with initialisation order that aren't a problem when we can guarantee that the most-derived subclass is being swizzled.

sharplet commented 4 years ago

Possible duplicate of #18.