Object Type Declarations and FeaturesInitializersOptional propertiesReferring to selfDelegating initializersFailable initializersPropertiesMethodsSubscriptsNested Object TypesInstance ReferencesEnumsCase With Fixed ValueCase With Typed ValueEnum InitializersEnum PropertiesEnum MethodsWhy Enums?StructsStruct Initializers, Properties, and MethodsStruct As NamespaceClassesValue Types and Reference TypesSubclass and SuperclassClass InitializersKinds of class initializerSubclass initializersRequired initializersSurprises from CocoaClass 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 TypesAnyObjectSuppressing type checkingObject identity and type identityAnyClassAnyCollection TypesArrayArray casting and type testingArray comparisonArrays are value typesArray subscriptingNested arraysBasic array properties and methodsArray enumeration and transformationSwift Array and Objective-C NSArrayDictionaryBasic dictionary properties and enumerationSwift Dictionary and Objective-C NSDictionarySetOption setsSwift Set and Objective-C NSSet