https://medium.com/@yury.buslovsky/uiviewcontroller-lifecycle-behavior-8c023f433a87
Branch concrete-object-implementation demonstrates how you can dispense with protocol-based behaviors.
Branch conflicting-protocols-implementation helps you resolve issues with conflicting default implementations.