thoughtbot/CombineViewModel

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

Opened this issue · 1 comments

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.

Possible duplicate of #18.