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.