Conventions Used in This BookUsing Code ExamplesSafari® Books OnlineHow to Contact UsAcknowledgmentsGetting Started with SwiftThe Swift REPLSwift as a Scripting LanguageSwift PlaygroundsA Taste of SwiftBasic Language FeaturesCommentsSemicolonsWhitespaceImporting Code from Other ModulesTypesSpecific Integer TypesNumeric LiteralsCharacter and String LiteralsType AliasesNested TypesOther TypesVariables and ConstantsComputed VariablesVariable ObserversTuplesTuple Variables and ConstantsExtracting Tuple ComponentsNaming Tuple ComponentsUsing Type Aliases with TuplesTuples as Return TypesOperatorsNo Implicit Type ConversionArithmetic OperatorsBitwise OperatorsAssignment OperatorsComparison OperatorsLogical OperatorsOverflow OperatorsType Casting OperatorsRange OperatorsTernary Conditional OperatorOperator PrecedenceStrings and CharactersString PropertiesComparing StringsEscaped Characters in StringsString InterpolationArraysAccessing Array ElementsArray PropertiesModifying a Mutable ArrayIterating Over ArraysArray AlgorithmsDictionariesAccessing Dictionary ElementsDictionary PropertiesModifying a Mutable DictionaryIterating Over DictionariesFunctionsParameter TypesReturning Optional ValuesReturning Multiple Values by using TuplesLocal and External Parameter NamesDefault Parameter ValuesVariadic ParametersFunction TypesClosuresAutomatic Argument NamesTrailing ClosuresCapturing ValuesCapturing Values by ReferenceOptionalsUnwrapping OptionalsImplicitly Unwrapped OptionalsOptional BindingOptional ChainingProgram FlowLoopsConditional ExecutionClassesDefining a Base ClassInstancesPropertiesMethodsSubscriptsMember ProtectionInheritance: Deriving One Class from AnotherOverriding Superclass EntitiesPreventing Overrides and SubclassingInitializationInitialization and InheritanceDeinitializationStructuresProperties in StructuresMethods in StructuresMutating MethodsType Methods for StructuresInitializers in StructuresEnumerationsRaw Member ValuesAssociated ValuesMethods in EnumerationsType Methods for EnumerationsAccess ControlSpecifying Access Control LevelsDefault Access Control LevelsExtensionsComputed Property ExtensionsInitializer ExtensionsMethod ExtensionsSubscript ExtensionsChecking and Casting TypesAny and AnyObjectChecking TypesDowncasting TypesProtocolsRequired PropertiesRequired MethodsOptional Methods and PropertiesAdopting Protocols with ExtensionsInheritance and ProtocolsUsing a Protocol as a TypeChecking Protocol ConformanceBuilt-In ProtocolsMemory ManagementHow Reference Counting WorksRetain Cycles and Strong ReferencesWeak ReferencesUnowned ReferencesRetain Cycles and ClosuresGenericsGeneric FunctionsGeneric TypesConstraining TypesGeneric ProtocolsOperator OverloadingOverloading Unary OperatorsCustom OperatorsCustom Operator PrecedenceRanges, Intervals, and StridesRangesIntervalsStridesGlobal Functions