Skip to content

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

@sharplet

Description

@sharplet

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions