Conventions Used in This BookUsing Code ExamplesSafari® Books OnlineHow to Contact UsAcknowledgmentsGetting Started with Swift 2The Swift REPLSwift as a Scripting LanguageSwift PlaygroundsA Taste of SwiftBasic Language FeaturesCommentsSemicolonsWhitespaceNaming ConventionsImporting 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 InterpolationConverting Strings to Numeric TypesCharacter-Level Access in StringsString Inherited FunctionalityArraysAccessing Array ElementsArray PropertiesModifying a Mutable ArrayIterating Over ArraysArray Inherited FunctionalitySlicesDictionariesAccessing Dictionary ElementsDictionary PropertiesModifying a Mutable DictionaryIterating Over DictionariesDictionary Inherited FunctionalitySetsAccessing Set Items and PropertiesModifying a Mutable SetIterating Over Sets Set OperationsSet Inherited FunctionalityOption SetsFunctionsParameter 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 ExecutionError HandlingClassesDefining a Base ClassInstancesPropertiesMethodsSubscriptsMember ProtectionInheritance: Deriving One Class from AnotherOverriding Superclass EntitiesPreventing Overrides and SubclassingInitializationInitialization and InheritanceDeinitializationStructuresProperties in StructuresMethods in StructuresType Methods for StructuresInitializers in StructuresEnumerationsRaw Member ValuesAssociated ValuesMethods in EnumerationsType Methods for EnumerationsRecursive EnumerationsFailable Initializers in EnumerationsAccess ControlSpecifying Access Control LevelsDefault Access Control LevelsExtensionsComputed Property ExtensionsInitializer ExtensionsMethod ExtensionsSubscript ExtensionsChecking and Casting TypesAny and AnyObjectChecking TypesDowncasting TypesProtocolsRequired PropertiesRequired MethodsOptional Methods and PropertiesInitializers in ProtocolsAdopting Protocols with ExtensionsInheritance and ProtocolsUsing a Protocol as a TypeChecking Protocol ConformanceProtocol ExtensionsBuilt-In ProtocolsThe GeneratorType ProtocolThe SequenceType ProtocolThe CollectionType ProtocolMemory 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 FunctionsChanges From Swift 1.0