Document Revision History
2018-09-17
Updated for Swift 4.2.
Added information about accessing all of an enumeration’s cases to the Iterating over Enumeration Cases section.
Added information about and
#warning
to the section.Added information about inlining to the Declaration Attributes section under the
inlinable
andusableFromInline
attributes.Added information about members that are looked up by name at runtime to the section under the
dynamicMemberLookup
attribute.Added information about the
requires_stored_property_inits
andwarn_unqualified_access
attributes to the Declaration Attributes section.Added information about how to conditionally compile code depending on the Swift compiler version being used to the section.
Added information about
#dsohandle
to the Literal Expression section.
2018-03-29
Updated for Swift 4.1.
Added information about synthesized implementations of equivalence operators to the section.
Added information about conditional protocol conformance to the Extension Declaration section of the chapter, and to the Conditionally Conforming to a Protocol section of the chapter.
Added information about recursive protocol constraints to the Using a Protocol in Its Associated Type’s Constraints section.
Added information about the
canImport()
andtargetEnvironment()
platform conditions to .
2017-12-04
Updated for Swift 4.0.3.
Updated the Key-Path Expression section, now that key paths support subscript components.
2017-09-19
Updated for Swift 4.0.
Added information about exclusive access to memory to the chapter.
Added the Associated Types with a Generic Where Clause section, now that you can use generic
where
clauses to constrain associated types.Added information about multiline string literals to the section of the Strings and Characters chapter, and to the section of the Lexical Structure chapter.
Updated the discussion of the
objc
attribute in , now that this attribute is inferred in fewer places.Added the Generic Subscripts section, now that subscripts can be generic.
Updated the discussion in the section of the Protocols chapter, and in the section of the Types chapter, now that protocol composition types can contain a superclass requirement.
Updated the discussion of protocol extensions in now that
final
isn’t allowed in them.Added information about preconditions and fatal errors to the Assertions and Preconditions section.
2017-03-27
Updated for Swift 3.1.
Added the section with information about extensions that include requirements.
Added examples of iterating over a range to the For-In Loops section.
Added an example of failable numeric conversions to the section.
Added information to the Declaration Attributes section about using the
available
attribute with a Swift language version.Updated the discussion in the section to note that argument labels are not allowed when writing a function type.
Updated the discussion of Swift language version numbers in the Conditional Compilation Block section, now that an optional patch number is allowed.
Updated the discussion in the section, now that Swift distinguishes between functions that take multiple parameters and functions that take a single parameter of a tuple type.
Removed the Dynamic Type Expression section from the Expressions chapter, now that
type(of:)
is a Swift standard library function.
2016-10-27
Updated for Swift 3.0.1.
Updated the discussion of weak and unowned references in the chapter.
Added information about the
unowned
,unowned(safe)
, andunowned(unsafe)
declaration modifiers in the Declaration Modifiers section.Added a note to the section about using an optional value when a value of type
Any
is expected.Updated the Expressions chapter to separate the discussion of parenthesized expressions and tuple expressions.
2016-09-13
Updated for Swift 3.0.
Updated the discussion of functions in the chapter and the Function Declaration section to note that all parameters get an argument label by default.
Updated the discussion of operators in the chapter, now that you implement them as type methods instead of as global functions.
Added information about the
open
andfileprivate
access-level modifiers to the Access Control chapter.Updated the discussion of
inout
in the section to note that it appears in front of a parameter’s type instead of in front of a parameter’s name.Updated the discussion of the
@noescape
and@autoclosure
attributes in the Escaping Closures and sections and the Attributes chapter now that they are type attributes, rather than declaration attributes.Added information about operator precedence groups to the section of the Advanced Operators chapter, and to the section of the Declarations chapter.
Updated discussion throughout to use macOS instead of OS X,
Error
instead ofErrorProtocol
, and protocol names such asExpressibleByStringLiteral
instead ofStringLiteralConvertible
.Updated the discussion in the section of the Generics chapter and in the chapter, now that generic
where
clauses are written at the end of a declaration.Updated the discussion in the Escaping Closures section, now that closures are nonescaping by default.
Updated the discussion in the section of the The Basics chapter and the section of the Statements chapter, now that
if
,while
, andguard
statements use a comma-separated list of conditions withoutwhere
clauses.Added information about switch cases that have multiple patterns to the section of the Control Flow chapter and the section of the Statements chapter.
Updated the discussion of function types in the section now that function argument labels are no longer part of a function’s type.
Updated the discussion of protocol composition types in the Protocol Composition section of the chapter and in the Protocol Composition Type section of the chapter to use the new
Protocol1 & Protocol2
syntax.Updated the discussion in the Dynamic Type Expression section to use the new
type(of:)
syntax for dynamic type expressions.Updated the discussion of line control statements to use the
#sourceLocation(file:line:)
syntax in the Line Control Statement section.Updated the discussion in to use the new
Never
type.Added information about playground literals to the Literal Expression section.
Updated the discussion in the section to note that only nonescaping closures can capture in-out parameters.
Updated the discussion about default parameters in the Default Parameter Values section, now that they can’t be reordered in function calls.
Updated attribute arguments to use a colon in the chapter.
Added information about throwing an error inside the catch block of a rethrowing function to the Rethrowing Functions and Methods section.
Added information about accessing the selector of an Objective-C property’s getter or setter to the section.
Added information to the Type Alias Declaration section about generic type aliases and using type aliases inside of protocols.
Updated the discussion of function types in the section to note that parentheses around the parameter types are required.
Updated the Attributes chapter to note that the
@IBAction
,@IBOutlet
, and@NSManaged
attributes imply the@objc
attribute.Added information about the
@GKInspectable
attribute to the section.Removed the discussion of explicitly using
let
in function parameters from the Function Declaration section.Removed the discussion of the
Boolean
protocol from the chapter, now that the protocol has been removed from the Swift standard library.
2016-03-21
Updated for Swift 2.2.
Added information about how to conditionally compile code depending on the version of Swift being used to the Conditional Compilation Block section.
Added information about how to distinguish between methods or initializers whose names differ only by the names of their arguments to the section.
Added information about the
#selector
syntax for Objective-C selectors to the Selector Expression section.Updated the discussion of associated types to use the
associatedtype
keyword in the and Protocol Associated Type Declaration sections.Updated information about initializers that return
nil
before the instance is fully initialized in the section.Added information about comparing tuples to the Comparison Operators section.
Added information about using keywords as external parameter names to the section.
Updated the discussion of the
@objc
attribute in the Declaration Attributes section to note that enumerations and enumeration cases can use this attribute.Updated the section with discussion of custom operators that contain a dot.
Added a note to the Rethrowing Functions and Methods section that rethrowing functions can’t directly throw errors.
Added a note to the section about property observers being called when you pass a property as an in-out parameter.
Added a section about error handling to the A Swift Tour chapter.
Updated figures in the section to show the deallocation process more clearly.
Removed discussion of C-style
for
loops, the++
prefix and postfix operators, and the--
prefix and postfix operators.Removed discussion of variable function arguments and the special syntax for curried functions.
2015-10-20
Updated for Swift 2.1.
Updated the String Interpolation and sections now that string interpolations can contain string literals.
Added the Escaping Closures section with information about the
@noescape
attribute.Updated the and Conditional Compilation Block sections with information about tvOS.
Added information about the behavior of in-out parameters to the section.
Added information to the Capture Lists section about how values specified in closure capture lists are captured.
Updated the section to clarify how assignment through optional chaining behaves.
Improved the discussion of autoclosures in the Autoclosures section.
Added an example that uses the
??
operator to the chapter.
2015-09-16
Updated for Swift 2.0.
Added information about error handling to the Error Handling chapter, the section, the Throw Statement section, the section, and the Try Operator section.
Updated the section, now that all types can conform to the
ErrorType
protocol.Added information about the new keyword to the Converting Errors to Optional Values section.
Added information about recursive enumerations to the section of the Enumerations chapter and the section of the Declarations chapter.
Added information about API availability checking to the section of the Control Flow chapter and the section of the Statements chapter.
Added information about the new
guard
statement to the section of the Control Flow chapter and the section of the Statements chapter.Added information about protocol extensions to the section of the Protocols chapter.
Added information about access control for unit testing to the section of the Access Control chapter.
Added information about the new optional pattern to the section of the Patterns chapter.
Updated the section with information about the
repeat
-while
loop.Updated the Strings and Characters chapter, now that
String
no longer conforms to theCollectionType
protocol from the Swift standard library.Added information about the new Swift standard library
print(_:separator:terminator)
function to the section.Added information about the behavior of enumeration cases with
String
raw values to the Implicitly Assigned Raw Values section of the chapter and the Enumerations with Cases of a Raw-Value Type section of the chapter.Added information about the
@autoclosure
attribute—including its@autoclosure(escaping)
form—to the Autoclosures section.Updated the section with information about the
@available
and@warn_unused_result
attributes.Updated the Type Attributes section with information about the
@convention
attribute.Added an example of using multiple optional bindings with a
where
clause to the section.Added information to the String Literals section about how concatenating string literals using the
+
operator happens at compile time.Added information to the section about comparing metatype values and using them to construct instances with initializer expressions.
Added a note to the Debugging with Assertions section about when user-defined assertions are disabled.
Updated the discussion of the
@NSManaged
attribute in the section, now that the attribute can be applied to certain instance methods.Updated the Variadic Parameters section, now that variadic parameters can be declared in any position in a function’s parameter list.
Added information to the section about how a nonfailable initializer can delegate up to a failable initializer by force-unwrapping the result of the superclass’s initializer.
Added information about using enumeration cases as functions to the Enumerations with Cases of Any Type section.
Added information about explicitly referencing an initializer to the section.
Added information about build configuration and line control statements to the Compiler Control Statements section.
Added a note to the section about constructing class instances from metatype values.
Added a note to the Weak References section about weak references being unsuitable for caching.
Updated a note in the section to mention that stored type properties are lazily initialized.
Updated the Capturing Values section to clarify how variables and constants are captured in closures.
Updated the section to describe when you can apply the
@objc
attribute to classes.Added a note to the Handling Errors section about the performance of executing a
throw
statement. Added similar information about thedo
statement in the section.Updated the Type Properties section with information about stored and computed type properties for classes, structures, and enumerations.
Updated the section with information about labeled break statements.
Updated a note in the Property Observers section to clarify the behavior of
willSet
anddidSet
observers.Added a note to the section with information about the scope of
private
access.Added a note to the Weak References section about the differences in weak references between garbage collected systems and ARC.
Updated the section with a more precise definition of Unicode scalars.
2015-04-08
Updated for Swift 1.2.
@autoclosure
is now an attribute of the parameter declaration, not its type. There is also a new@noescape
parameter declaration attribute. For more information, see Declaration Attributes.Type methods and properties now use the
static
keyword as a declaration modifier. For more information see .Added a new guide section about String Indices.
Removed the overflow division (
&/
) and overflow remainder (&%
) operators from .Updated the rules for constant and constant property declaration and initialization. For more information, see Constant Declaration.
Updated the definition of Unicode scalars in string literals. See .
Updated Range Operators to note that a half-open range with the same start and end index will be empty.
Updated to clarify the capturing rules for variables.
Updated Value Overflow to clarify the overflow behavior of signed and unsigned integers
Updated to clarify protocol declaration scope and members.
Updated Defining a Capture List to clarify the syntax for weak and unowned references in closure capture lists.
Updated to explicitly mention examples of supported characters for custom operators, such as those in the Mathematical Operators, Miscellaneous Symbols, and Dingbats Unicode blocks.
Constants can now be declared without being initialized in local function scope. They must have a set value before first use. For more information, see Constant Declaration.
In an initializer, constant properties can now only assign a value once. For more information, see .
Multiple optional bindings can now appear in a single
if
statement as a comma-separated list of assignment expressions. For more information, see Optional Binding.An must appear within a postfix expression.
Protocol casts are no longer limited to
@objc
protocols.Type casts that can fail at runtime now use the
as?
oras!
operator, and type casts that are guaranteed not to fail use theas
operator. For more information, see Type-Casting Operators.
2014-10-16
Updated for Swift 1.1.
Added a full guide to .
Added a description of Failable Initializer Requirements for protocols.
Constants and variables of type
Any
can now contain function instances. Updated the example in to show how to check for and cast to a function type within aswitch
statement.Enumerations with raw values now have a
rawValue
property rather than atoRaw()
method and a failable initializer with arawValue
parameter rather than afromRaw()
method. For more information, see Raw Values and .Added a new reference section about Failable Initializers, which can trigger initialization failure.
Custom operators can now contain the
?
character. Updated the reference to describe the revised rules. Removed a duplicate description of the valid set of operator characters from Custom Operators.
2014-08-18
New document that describes Swift 1.0, Apple’s new programming language for building iOS and OS X apps.
Added a new section about in protocols.
Added a new section about Class-Only Protocols.
can now use string interpolation. Removed a note to the contrary.
Updated the Concatenating Strings and Characters section to reflect the fact that
String
andCharacter
values can no longer be combined with the addition operator (+
) or addition assignment operator (+=
). These operators are now used only withString
values. Use theString
type’sappend(_:)
method to append a singleCharacter
value onto the end of a string.Added information about the
availability
attribute to the section.Optionals no longer implicitly evaluate to
true
when they have a value andfalse
when they do not, to avoid confusion when working with optionalBool
values. Instead, make an explicit check againstnil
with the or!=
operators to find out if an optional contains a value.Swift now has a (
a ?? b
), which unwraps an optional’s value if it exists, or returns a default value if the optional isnil
.Updated and expanded the Comparing Strings section to reflect and demonstrate that string and character comparison and prefix / suffix comparison are now based on Unicode canonical equivalence of extended grapheme clusters.
You can now try to set a property’s value, assign to a subscript, or call a mutating method or operator through . The information about Accessing Properties Through Optional Chaining has been updated accordingly, and the examples of checking for method call success in have been expanded to show how to check for property setting success.
Added a new section about Accessing Subscripts of Optional Type through optional chaining.
Updated the section to note that you can no longer append a single item to an array with the
+=
operator. Instead, use theappend(_:)
method, or append a single-item array with the+=
operator.Added a note that the start value
a
for the Range Operatorsa...b
anda..<b
must not be greater than the end valueb
.Rewrote the chapter to remove its introductory coverage of initializer overrides. This chapter now focuses more on the addition of new functionality in a subclass, and the modification of existing functionality with overrides. The chapter’s example of Overriding Property Getters and Setters has been rewritten to show how to override a
description
property. (The examples of modifying an inherited property’s default value in a subclass initializer have been moved to the chapter.)Updated the Initializer Inheritance and Overriding section to note that overrides of a designated initializer must now be marked with the
override
modifier.Updated the section to note that the
required
modifier is now written before every subclass implementation of a required initializer, and that the requirements for required initializers can now be satisfied by automatically inherited initializers.Infix Operator Methods no longer require the
@infix
attribute.The
@prefix
and@postfix
attributes for have been replaced byprefix
andpostfix
declaration modifiers.Added a note about the order in which Prefix and Postfix Operators are applied when both a prefix and a postfix operator are applied to the same operand.
Operator functions for no longer use the
@assignment
attribute when defining the function.The order in which modifiers are specified when defining Custom Operators has changed. You now write
prefix operator
rather thanoperator prefix
, for example.Added information about the
dynamic
declaration modifier in .Added information about how type inference works with Literals.
Added more information about curried functions.
Added a new chapter about .
Updated the Strings and Characters chapter to reflect the fact that Swift’s
Character
type now represents a single Unicode extended grapheme cluster. Includes a new section on and more information about Unicode Scalar Values and .Updated the String Literals section to note that Unicode scalars inside string literals are now written as
\u{n}
, wheren
is a hexadecimal number between 0 and 10FFFF, the range of Unicode’s codespace.The
NSString
length
property is now mapped onto Swift’s nativeString
type asutf16Count
, notutf16count
.Swift’s native
String
type no longer has anuppercaseString
orlowercaseString
property. The corresponding section in has been removed, and various code examples have been updated.Added a new section about Initializer Parameters Without Argument Labels.
Added a new section about .
Added a new section about Optional Tuple Return Types.
Updated the section to note that multiple related variables can be defined on a single line with one type annotation.
The
@optional
,@lazy
,@final
, and@required
attributes are now theoptional
,lazy
,final
, andrequired
Declaration Modifiers.Updated the entire book to refer to
..<
as the (rather than the “half-closed range operator”).Updated the Accessing and Modifying a Dictionary section to note that
Dictionary
now has a BooleanisEmpty
property.Clarified the full list of characters that can be used when defining .
nil
and the Booleanstrue
andfalse
are now Literals.Swift’s
Array
type now has full value semantics. Updated the information about and Arrays to reflect the new approach. Also clarified the assignment and copy behavior for strings arrays and dictionaries.is now written as
[SomeType]
rather thanSomeType[]
.Added a new section about Dictionary Type Shorthand Syntax, which is written as
[KeyType: ValueType]
.Added a new section about .
Examples of Closure Expressions now use the global
sorted(_:_:)
function rather than the globalsort(_:_:)
function, to reflect the new array value semantics.Updated the information about to clarify that the memberwise structure initializer is made available even if a structure’s stored properties do not have default values.