You already know that protocols can be used to improve code by removing complex inheritance hierarchies. You also know how powerful the Protocol-Oriented paradigm is when it is when it comes to checking for protocol conformance instead of checking whether a particular object is of a certain type. Let's see how you can improve and future-proof the Hello-Contacts application by adding some protocols.
You will define two protocols for now: one that specifies the requirements for any object that claims to be able to add a special animation to a view, and one that defines what it means to be able to be displayed as a contact.
The first protocol you will define is called
ViewEffectAnimatorType. This protocol should be applied to any object that implements the required behaviors to animate a view. This protocol does not necessarily give you a direct advantage, but there are a few considerations that make this a very useful protocol...