A Protocol specifies initialisers, properties, functions, subscripts and associated types required of a Swift object type (class, struct or enu