Eliasz Sawicki

Eliasz Sawicki

iOS developer from Gdansk

My thoughts on - StatefulViewController

- 1 min

I had a chance to play a little bit with a nice pod that is called StatefulViewController, created by Alexander Schuch. StatefulViewController works with both UIView and UIViewController, and allows you to introduce placeholders for their different states: Loading, Error, Empty or Content. Everything is based on an intuitive protocol and after providing your placeholder views and implementing required methods everything works like a charm. You can find this pod on Alexander’s github. I’ve looked into the code of this pod and I found a few things that I want to share with you today.

StateMachine

Whole idea is based on ViewStateMachine, which handles transitions of views that you have assigned to each state. All states are represented by this nice enum Notice, that this enum conforms to Equatable protocol, which lets us implement "==" operator for this enum. When you do this, standard library provides an implementation for "!=". This move allows us to compare states later on.

Subscript

Another thing that was interesting for me was subscript provided for a ViewStateMachine class.”You use subscripts to set and retrieve values by index without needing separate methods for setting and retrieval.” - note from Apple.

Example use:

Extension property

Normally, you can’t add a property to a class via an extension, but you can achive this using an associated object.

Documentation

I really liked the documentation that was provided with this pod. In Objective-C we had a nice header file, which was pretty easy to read from. Here we have two files. StatefulViewController.swift file, which provides nice documentation and StatefulViewControllerImplementation.swift which containts implementation of StatefulViewController class.

It was really interesting code, which taught me some new thing. I hope that you liked it too!

This article is cross-posted with my my company blog

comments powered by Disqus
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora