The document discusses protocols in Swift 3. It defines protocols as defining requirements for methods, properties, or other functionality that adopting types must implement. Protocols can be adopted by structures, classes, and enumerations and allow for multiple inheritance of behaviors and polymorphic behavior through protocol composition. The document provides examples of defining and implementing protocols, including property requirements, method requirements, initializers, and optional protocol requirements.