While protocols themselves may not seem very exciting, they are actually quite powerful. As we saw in this chapter, we are able to use them to create very specific requirements. We can then use protocol inheritance and protocol composition to create protocol hierarchies. We also saw how to implement delegation patterns with protocols.
We concluded this chapter by showing you how we can model a robot with sensors using protocols and how Apple uses protocols in the Swift standard library.
In Chapter 3, Extensions, we will see how we can use protocol extensions to add functionality to types that conform to a protocol, but before we do that, let's look at our type choices.