Document Revision History

Document Revision History

Review the recent changes to this book.

2025-03-31

  • Updated for Swift 6.1.
  • Added the section

with information about using some as a lightweight syntax for generics.

  • Added information about the noasync argument

to the section.

2024-09-23

  • Updated for Swift 6.
  • Added the section

with information about migrating to strict concurrency checking.

  • Added the section

with information about throwing errors of a specific type.

  • Updated the section,

now that any macro can be used as a default value for a parameter.

  • Added information about package-level access

to the chapter.

2024-03-05

  • Updated for Swift 5.10.
  • Added information about nested protocols

to the section.

  • Added deprecation information

in the and sections.

2023-12-11

  • Updated for Swift 5.9.2.
  • Added information about the borrowing and consuming modifiers

to the section.

  • Added information in

about setting a constant's value after its declaration.

  • Added more information about tasks, task groups, and task cancellation

to the chapter.

  • Added information in the chapter

about implementing macros in an existing Swift package.

  • Updated the section,

now that extension macros have replaced conformance macros.

  • Added the section

with information about back deployment.

2023-09-18

  • Updated for Swift 5.9.
  • Added information about if and switch expressions

to the chapter and the section.

  • Added the chapter,

with information about generating code at compile time.

  • Expanded the discussion of optionals in .
  • Added an example of concurrency to .
  • Added information about boxed protocol types

to the chapter.

  • Added information about the buildPartialBlock(first:)

and buildPartialBlock(accumulated:next:) methods to the section.

  • Added visionOS to the lists of platforms in

and .

2023-03-30

  • Updated for Swift 5.8.
  • Added the section,

showing defer outside of error handling.

2022-09-12

  • Updated for Swift 5.7.
  • Added the section,

with information about sending data between actors and tasks, and added information about the @Sendable and @unchecked attributes to the and sections.

  • Added the section

with information about creating a regular expression.

  • Added information about the short form of if-let

to the section.

  • Added information about #unavailable

to the section.

2022-03-14

  • Updated for Swift 5.6.
  • Updated the section

with information about using #if around chained method calls and other postfix expressions.

2021-09-20

  • Updated for Swift 5.5.
  • Added information about asynchronous functions, tasks, and actors

to the chapter, and to the , , and sections.

  • Updated the section

with information about identifiers that start with an underscore.

2021-04-26

  • Updated for Swift 5.4.
  • Added the

and sections with information about result builders.

  • Added the section

with information about how in-out parameters can be implicitly converted to unsafe pointers in a function call.

  • Updated the

and sections, now that a function can have multiple variadic parameters.

  • Updated the section,

now that implicit member expressions can be chained together.

2020-09-16

  • Updated for Swift 5.3.
  • Added information about multiple trailing closures

to the section, and added information about how trailing closures are matched to parameters to the section.

  • Added information about synthesized implementations

of Comparable for enumerations to the section.

  • Added the section

now that you can write a generic where clause in more places.

  • Added the section

with information about using unowned references with optional values.

  • Added information about the @main attribute

to the section.

  • Added #filePath to the section,

and updated the discussion of #file.

  • Updated the section,

now that closures can refer to self implicitly in more scenarios.

  • Updated the

and sections, now that a catch clause can match against multiple errors.

  • Added more information about Any

and moved it into the new section.

  • Updated the section,

now that lazy properties can have observers.

  • Updated the section,

now that members of an enumeration can satisfy protocol requirements.

  • Updated the section

to describe when the getter is called before the observer.

  • Updated the chapter

to mention atomic operations.

2020-03-24

  • Updated for Swift 5.2.
  • Added information about passing a key path instead of a closure

to the section.

  • Added the section

with information about syntactic sugar the lets instances of classes, structures, and enumerations be used with function call syntax.

  • Updated the section,

now that subscripts support parameters with default values.

  • Updated the section,

now that the Self can be used in more contexts.

  • Updated the section

to make it clearer that an implicitly unwrapped optional value can be used as either an optional or non-optional value.

2019-09-10

  • Updated for Swift 5.1.
  • Added information about functions

that specify a protocol that their return value conforms to, instead of providing a specific named return type, to the chapter.

  • Added information about property wrappers

to the section.

  • Added information about enumerations and structures

that are frozen for library evolution to the section.

  • Added the

and sections with information about functions that omit return.

  • Added information about using subscripts on types

to the section.

  • Updated the section,

now that an enumeration case pattern can match an optional value.

  • Updated the section,

now that memberwise initializers support omitting parameters for properties that have a default value.

  • Added information about dynamic members

that are looked up by key path at runtime to the section.

  • Added macCatalyst to the list of target environments

in .

  • Updated the section,

now that Self can be used to refer to the type introduced by the current class, structure, or enumeration declaration.

2019-03-25

  • Updated for Swift 5.0.
  • Added the section

and updated the section with information about extended string delimiters.

  • Added the section

with information about dynamically calling instances as functions using the dynamicCallable attribute.

  • Added the and sections

with information about handling future enumeration cases in switch statements using the unknown switch case attribute.

  • Added information about the identity key path (\.self)

to the section.

  • Added information about using the less than (<) operator

in platform conditions to the section.

2018-09-17

  • Updated for Swift 4.2.
  • Added information about accessing all of an enumeration's cases

to the section.

  • Added information about #error and #warning

to the section.

  • Added information about inlining

to the section under the inlinable and usableFromInline attributes.

  • Added information about members that are looked up by name at runtime

to the section under the dynamicMemberLookup attribute.

  • Added information about the requiresstoredpropertyinits and warnunqualified_access attributes

to the 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 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 section of the chapter, and to the section of the chapter.

  • Added information about recursive protocol constraints

to the section.

  • Added information about

the canImport() and targetEnvironment() platform conditions to .

2017-12-04

  • Updated for Swift 4.0.3.
  • Updated the 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 section,

now that you can use generic where clauses to constrain associated types.

  • Added information about multiline string literals

to the section of the chapter, and to the section of the chapter.

  • Updated the discussion of the objc attribute

in , now that this attribute is inferred in fewer places.

  • Added the section,

now that subscripts can be generic.

  • Updated the discussion

in the section of the chapter, and in the section of the 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 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 section.

  • Added an example of failable numeric conversions

to the section.

  • Added information to the section

about using the available attribute with a Swift language version.

  • Updated the discussion in the section

to note that argument labels aren't allowed when writing a function type.

  • Updated the discussion of Swift language version numbers

in the 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 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), and unowned(unsafe)

declaration modifiers in the section.

  • Added a note to the section

about using an optional value when a value of type Any is expected.

  • Updated the 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 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 and fileprivate access-level modifiers

to the 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 and sections and the chapter now that they're type attributes, rather than declaration attributes.

  • Added information about operator precedence groups

to the section of the chapter, and to the section of the chapter.

  • Updated discussion throughout

to use macOS instead of OS X, Error instead of ErrorProtocol, and protocol names such as ExpressibleByStringLiteral instead of StringLiteralConvertible.

  • Updated the discussion

in the section of the chapter and in the chapter, now that generic where clauses are written at the end of a declaration.

  • Updated the discussion in the section,

now that closures are nonescaping by default.

  • Updated the discussion

in the section of the chapter and the section of the chapter, now that if, while, and guard statements use a comma-separated list of conditions without where clauses.

  • Added information about switch cases that have multiple patterns

to the section of the chapter and the section of the 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 section of the chapter and in the 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 section.

  • Updated the discussion in

to use the new Never type.

  • Added information about playground literals

to the 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 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 section.

  • Added information about accessing the selector

of an Objective-C property's getter or setter to the section.

  • Added information to the 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 chapter

to note that the @IBAction, @IBOutlet, and @NSManaged attributes imply the @objc attribute.

  • Added information about the @GKInspectable attribute

to the section.

  • Updated the discussion of optional protocol requirements

in the section to clarify that they're used only in code that interoperates with Objective-C.

  • Removed the discussion of explicitly using let in function parameters

from the section.

  • Removed the discussion of the Boolean protocol

from the chapter, now that the protocol has been removed from the Swift standard library.

  • Corrected the discussion of the @NSApplicationMain attribute

in the section.

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 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 section.

  • Updated the discussion of associated types

to use the associatedtype keyword in the and sections.

  • Updated information about initializers that return nil

before the instance is fully initialized in the section.

  • Added information about comparing tuples

to the section.

  • Added information about using keywords as external parameter names

to the section.

  • Updated the discussion of the @objc attribute

in the 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 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 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

and sections now that string interpolations can contain string literals.

  • Added the section

with information about the @noescape attribute.

  • Updated the

and sections with information about tvOS.

  • Added information about the behavior of in-out parameters

to the section.

  • Added information to the 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 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 chapter, the section, the section, the section, and the section.

  • Updated the section,

now that all types can conform to the ErrorType protocol.

  • Added information about the new try? keyword

to the section.

  • Added information about recursive enumerations

to the section of the chapter and the section of the chapter.

  • Added information about API availability checking

to the section of the chapter and the section of the chapter.

  • Added information about the new guard statement

to the section of the chapter and the section of the chapter.

  • Added information about protocol extensions

to the section of the chapter.

  • Added information about access control for unit testing

to the section of the chapter.

  • Added information about the new optional pattern

to the section of the chapter.

  • Updated the section

with information about the repeat-while loop.

  • Updated the chapter,

now that String no longer conforms to the CollectionType 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 section of the chapter and the section of the chapter.

  • Added information about the @autoclosure attribute ---

including its @autoclosure(escaping) form --- to the section.

  • Updated the section

with information about the @available and @warnunusedresult attributes.

  • Updated the 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 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 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 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 section.

  • Added information about explicitly referencing an initializer

to the section.

  • Added information about build configuration

and line control statements to the section.

  • Added a note to the section

about constructing class instances from metatype values.

  • Added a note to the

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 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 section

about the performance of executing a throw statement. Added similar information about the do statement in the section.

  • Updated the 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 section

to clarify the behavior of willSet and didSet observers.

  • Added a note to the section

with information about the scope of private access.

  • Added a note to the

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.
  • Swift now has a native Set collection type.

For more information, see .

  • @autoclosure is now an attribute of the parameter declaration,

not its type. There's also a new @noescape parameter declaration attribute. For more information, see .

  • Type methods and properties now use the static keyword

as a declaration modifier. For more information see .

  • Swift now includes the as? and as! failable downcast operators.

For more information, see .

  • Added a new guide section about

.

  • Removed the overflow division (&/) and

overflow remainder (&%) operators from .

  • Updated the rules for constant and

constant property declaration and initialization. For more information, see .

  • Updated the definition of Unicode scalars in string literals.

See .

  • Updated 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 to clarify

the overflow behavior of signed and unsigned integers

  • Updated to clarify

protocol declaration scope and members.

  • Updated

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 .

  • 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 .

  • 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? or as! operator, and type casts that are guaranteed not to fail use the as operator. For more information, see .

2014-10-16

  • Updated for Swift 1.1.
  • Added a full guide to .
  • Added a description of

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 a switch statement.

  • Enumerations with raw values

now have a rawValue property rather than a toRaw() method and a failable initializer with a rawValue parameter rather than a fromRaw() method. For more information, see and .

  • Added a new reference section about

, 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 .

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 .
  • can now use string interpolation.

Removed a note to the contrary.

  • Updated the

section to reflect the fact that String and Character values can no longer be combined with the addition operator (+) or addition assignment operator (+=). These operators are now used only with String values. Use the String type's append(_:) method to append a single Character value onto the end of a string.

  • Added information about the availability attribute to

the section.

  • no longer implicitly evaluate to

true when they have a value and false when they do not, to avoid confusion when working with optional Bool values. Instead, make an explicit check against nil 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 is nil.

  • Updated and expanded

the 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 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

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 the append(_:) method, or append a single-item array with the += operator.

  • Added a note that the start value a

for the a...b and a.. must not be greater than the end value b.

  • 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 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

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 no longer require

the @infix attribute.

  • The @prefix and @postfix attributes

for have been replaced by prefix and postfix declaration modifiers.

  • Added a note about the order in which

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

has changed. You now write prefix operator rather than operator prefix, for example.

  • Added information about the dynamic declaration modifier

in .

  • Added information about how type inference works

with .

  • Added more information about curried functions.
  • Added a new chapter about .
  • Updated the 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 and .

  • Updated the section

to note that Unicode scalars inside string literals are now written as \u{n}, where n is a hexadecimal number between 0 and 10FFFF, the range of Unicode's codespace.

  • The NSString length property is now mapped onto

Swift's native String type as utf16Count, not utf16count.

  • Swift's native String type no longer has

an uppercaseString or lowercaseString property. The corresponding section in has been removed, and various code examples have been updated.

  • Added a new section about

.

  • Added a new section about

.

  • Added a new section about .
  • 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 the optional, lazy, final, and required .

  • Updated the entire book to refer to ..< as

the (rather than the “half-closed range operator”).

  • Updated the

section to note that Dictionary now has a Boolean isEmpty property.

  • Clarified the full list of characters that can be used

when defining .

  • nil and the Booleans true and false are now .
  • Swift's Array type now has full value semantics.

Updated the information about and to reflect the new approach. Also clarified the assignment and copy behavior for strings arrays and dictionaries.

  • is now written as

[SomeType] rather than SomeType[].

  • Added a new section about ,

which is written as [KeyType: ValueType].

  • Added a new section about .
  • Examples of now use

the global sorted(::) function rather than the global sort(::) 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 don't have default values.

  • Updated to ..< rather than ..

for the .

← 返回目录