Since Apple Swift went open source, we have of course been investigating and staying on top of the evolution of the Swift language, and engaged with the Swift community. We plan to support future language changes to new versions of the Swift language in a timely fashion.
Without promising exact timelines, we'll try to support all core Swift 3.0 language changes for the upcoming "Galaxy Class" release in late 2016, with further refinements in Elements update in early 2017 ("Hokule'a Class"). Of course details depend on the timelines for both Apple's releases and ours.
With the promised stabilization of the Swift ABI moved to version 4.0 or beyond, we will also be looking at support for Swift as a platform rather than a language, allowing the consumption and creation of binaries that work at Apple Swift level on the Cocoa platform, rather than at the Objective-C level. This would be on the roadmap for a release in late 2017.
Elements 8.3.91 provides full compatibility with Swift 2.0 and Swift 2.1, as well as for most of the (not yet finalized at the time of shipping) version 2.2 (See ).
Elements 9.0, currently in beta, contains our work for updating to Swift 3.0, with the status of individual items indicated below.
The lists below are kept in sync with this overview on swift.org.
Planned changes for Swift 4.0:
- Stable ABI
Tentative/pending changes for Swift 3.0 (not yet implemented in Apple's Swift):
Flattening the function type of unapplied method references— not applicable?
- (SE-0068) Expanding Swift
Selfto class members and value types — #75185
Adding a Build Configuration Import Test— not applicable
- (SE-0080) Failable Numeric Conversion Initializers — SBL
Package Manager Editable Packages— not applicable
- (SE-0104) Protocol-oriented integers — SBL?
- (SE-0110) Distinguish between single-tuple and multiple-argument function types — #75891
Confirmed changes for Swift 3.1 (implemented in Apple's Swift):
- (SE-0045) Add
prefix(while:), etc to the stdlib — SBL
Confirmed changes for Swift 3.0 (implemented in Apple's Swift):
Removing currying func declaration syntax— never was supported.
Removing— done, 9.0
varfrom Parameters and Pattern Matching
Remove the— done, 8.3.95
Better Translation of Objective-C APIs Into Swift— done, 9.0
Apply API Guidelines to the Standard Library– not applicable
Remove C-style for-loops with conditions and incrementers— done, 8.3.95
- (SE-0008) Add a Lazy flatMap for Sequences of Optionals — SBL
- (SE-0016) Adding initializers to Int to convert from Unsafe*Pointer — SBL
- (SE-0017) Change Unmanaged to use UnsafePointer — not applicable?
Swift Testing— not applicable
API Design Guidelines— not applicable
Scoped Access Level— done, 9.0
Remove implicit tuple splat behavior from function applications– not applicable
Adjusting— done, 9.0
inoutDeclarations for Type Decoration
- (SE-0032) Add
findmethod to SequenceType — SBL
- (SE-0033) Import Objective-C Constants as Swift Types — #74782
Disambiguating Line Control Statements from Debugging Identifiers— done, 9.0
- (SE-0035) Limiting inout capture to
@noescapecontexts — #74651
Requiring Leading Dot Prefixes for Enum Instance Members— done, 9.0
Clarify interaction between comments & operators— done, 9.0
Package Manager C Language Target Support— not applicable
Modernizing Playground Literals— not applicable.
Replacing Equal Signs with Colons For Attribute Arguments— done, 8.3.95
- (SE-0043) Declare variables in
caselabels with multiple patterns — #74958
- (SE-0044) Import as Member — #74959
Establish consistent label behavior across all parameters— done, 9.0
Defaulting non-Void functions so they warn on unused results— done, 9.0
Generic Type Aliases— done, 9.0
Move— done, 9.0
@autoclosureto be type attributes
- (SE-0052) Change IteratorType post-nil guarantee — SBL
Remove explicit use of let from Function Parameters— not applicable?
Abolish `ImplicitlyUnwrappedOptional1 type— not applicable?
Make unsafe pointer nullability explicit using Optional— not applicable?
- (SE-0057) Importing Objective-C Lightweight Generics — #75175
Update API Naming Guidelines and Rewrite Set APIs Accordingly— not applicable
- (SE-0060) Enforcing order of defaulted parameters — already covered?
- (SE-0061) Add Generic Result and Error Handling to autoreleasepool() — #75176
- (SE-0062) Referencing Objective-C key-paths — #75182
SwiftPM System Module Search Paths— not applicable
- (SE-0064) Referencing the Objective-C selector of property getters and setters — #75183
- (SE-0065) A New Model For Collections and Indices — #75177
Standardize function type argument syntax to require parentheses— done, 9.0
- (SE-0067) Enhanced Floating Point Protocols — SBL
- (SE-0069) Mutability and Foundation Value Types — SBL, if applicable
Make Optional Requirements Objective-C-only– not applicable
Allow (most) keywords in member references— done, 8.3.95
Fully eliminate implicit bridging conversions from Swift– not applicable?
- (SE-0076) Add overrides to copying methods on
- (SE-0077) Improved operator declarations — #75872
Move where clause to end of declaration— done, 9.0
Package Manager Command Names– not applicable
Drop NS Prefix in Swift Foundation— done, 9.0
- (SE-0088) Modernize libdispatch for Swift 3 naming conventions — 75177, wip
- (SE-0089) Renaming String.init
(_: T)— SBL
- (SE-0091) Improving operator requirements in protocols — #75873
- (SE-0092) Typealiases in protocols and protocol extensions — already covered?
- (SE-0093) Adding a public base property to slices – SBL
Add sequence(first:next:) and sequence(state:next:) to the stdlib— done, 8.3.95
- (SE-0096) Converting dynamicType from a property to an operator — #75398
Restructuring Condition Clauses— done, 9.0
- (SE-0101) Reconfiguring
sizeof& co into a unified
MemoryLayoutstruct — SBL?
Remove— done, 9.0
@noreturnattribute and introduce an empty
Make non-escaping closures the default— done, 9.0
Add a— done, 9.0
macOSAlias for the
OSXPlatform Configuration Test
UnsafeRawPointerAPI — SBL?
Remove the— won't do
Remove type system significance of function argument labels— done, 9.0
- (SE-0112) Improved NSError Bridging — #75888
- (SE-0113) Add integral rounding functions to FloatingPoint — SBL
- (SE-0114) Updating Buffer "Value" Names to "Header" Names — SBL
Rename Literal Syntax Protocolsmdash; done, 9.0
Import Objective-C– not applicable
Allow distinguishing between public access and public overridability— done, 9.0
- (SE-0118) Closure Parameter Names and Labels — #75885
- (SE-0120) Revise
partitionMethod Signature — SBL
- (SE-0121) Remove
OptionalComparison Operators — SBL
UInt.init()should have a
bitPattern:label — SBL
Remove– not applicable
Cleaning up stdlib Pointer and Buffer Routines– not applicable
- (SE-0128) Change failable UnicodeScalar initializers to failable — SBL
Package Manager Test Naming Conventions– not applicable
- (SE-0130) Replace repeating
- (SE-0131) Add AnyHashable to the standard library — SBL
- (SE-0133) Rename flatten() to joined() — SBL
- (SE-0134) Rename two UTF8-related properties on String — SBL
Package Manager Support for differentiating by version– not applicable
- (SE-0136) Memory Layout of Values
- (SE-0137) Avoiding Lock-In to Legacy Protocol Designs
Changes for Swift 2.2 (finalized):
Allow (most) keywords as argument labels— done, 8.3
Replace— done, 8.3
- (SE-0014) Constraining
- (SE-0015) Tuple comparison operators — #74181
Swift Language Version Build Configuration— done, 8.3
- (SE-0021) Naming Functions with Argument Labels — #74277
Referencing the Objective-C selector of a method— done, 8.3
Modernizing Swift's Debugging Identifiers— done, 8.3.95