Material Motion Exploring solutions that will empower creators with the tools needed to describe and implement rich, interactive motion on any platform. Edit this page · History
IndefiniteObservable creation
Status
Draft as of December 7, 2016

How Indefinite Observables work

An Observable is a bridge, connecting an event source to a listener. You’ve used lots of different event sources:

element.addEventListener('click', listener);
fetch(someURL).then(listener);
self.onmessage = listener;
gesture.addTarget(listener, action: #selector(gestureDidUpdate))
viewController.delegate = listener
gesture.addStateChangeListener(listener);
view.setOnClickListener(listener);

Each one puts the listener in a different place. An Observable is just a wrapper that gives them all the same interface:

clickStream.subscribe({
  next: listener
});

fetchResponseStream.subscribe({
  next: listener
});

messageStream.subscribe({
  next: listener
});
observableGesture.subscribe { value in
  listener.gestureDidUpdate(with: value)
}
observableViewController.subscribe { value in
  listener.didUpdate(with: value)
}

As you can see, each observable has a subscribe method. When you call subscribe, the Observable connects your listener to the event source, and returns an object with an unsubscribe method. Calling unsubscribe will disconnect the listener from the source.