Object Type Declarations and FeaturesInitializersPropertiesMethodsSubscriptsNested Object TypesInstance ReferencesEnumsRaw ValuesAssociated ValuesEnum InitializersEnum PropertiesEnum MethodsWhy Enums?StructsStruct Initializers, Properties, and MethodsStruct As NamespaceClassesValue Types and Reference TypesSubclass and SuperclassClass InitializersClass DeinitializerClass Properties and MethodsPolymorphismCastingType ReferenceProtocolsWhy Protocols?Protocol Type Testing and CastingDeclaring a ProtocolOptional Protocol MembersClass ProtocolImplicitly Required InitializersLiteral ConvertiblesGenericsGeneric DeclarationsType ConstraintsExplicit SpecializationAssociated Type ChainsAdditional ConstraintsExtensionsExtending Object TypesExtending ProtocolsExtending GenericsUmbrella TypesAnyAnyObjectAnyClassCollection TypesArrayDictionarySet