
Swift 4 Protocol-Oriented Programming
By :

To some, it may seem surprising that protocols are considered a type since we cannot actually create an instance of them; however, we can use them as a type. What this statement means is that, when we define the type for a variable, constant, tuple, or collection, we can use a protocol for that type.
We are not going to cover protocols in depth in this section since we have already covered them in Chapter 1,Starting with the Protocol, however, it is important to understand that they are considered a type.
Each type that we have discussed so far is either a value or a reference type; however, a protocol is neither because we are not able to create an instance of them.
It is really important to have a complete understanding of the differences between value and reference types in Swift, so let's compare the two.