In What’s New in Swift at WWDC 2018, Apple gave a quick overview of what’s new in Swift 4.2 and Swift 5. You can read my notes below, or you can watch the 40-minute video and download the slides from Apple.

Community updates

Swift 4.2:

Faster builds

Language features to improve efficiency

SDK improvements for Swift

Converging towards binary compatibility

Swift 5 (Early 2019):

binary compatibility with future Swift releases

Source Compatibility:

Compiler supports compatibility modes

One compiler with modes

Swift 4.2 SDK Changes

Updates to important framework APIs

Some API changes will land later in Xcode 10 betas

Xcode 10 is the last release to support Swift 3 compatibility mode

Compile time improvements

Compilation mode and Optimization mode are now separate

Compilation mode: incremental or whole module

Stop using Debug with Whole Module Compilation (kills incremental builds)

Runtime Optimizations

Small String: now 16 bytes (memory and performance win)

Reduced Code Size

Optimization:

Optimize for Size (app size limits for cellular downloads): makes runtime performance about 5% slower

Optimize for Speed

New Language Features in Swift 4.2

Swift Evolution website shows proposals and accepted status

Lots of proposals from the community were implemented

Enums

Now you can print every possible value

In Swift 4: define property with allCases: [Gait] = [.walk, .trot, ...]

Swift 4.2: CaseIterable (compiler eliminates boilerplate)

Equatable

If Array element is Equatable, Array is Equatable

Same for Optional and Dictionary

This is true for Hashable, Encodable, and Decodable as well

If Array element is Hashable, Array is Hashable (also true for Optional and Dictionary elements)

Same goes for Encodable and Decodable on Array, Optional, Dictionary

Summary: Array, Optional, and Dictionary are much easier to use

Synthesized Equatable and Hashable

Struct with stored properties, properties are equatable

Had to implement Equatable and == func

func Swift 4.1: synthesize implementation of Equatable and Hashable

What about generics?

– enum Either<Left, Right>

– Swift can implement Equatable for you now

Hash combining functions are hard

Swift 4.2 adds a better API

Hashable now has: func hash(into harsher: inout Hasher)

New hashing algorithm

Hash values vary from run to run (so don’t depend on hash values or order)

Random Numbers, Elements, and Order

Not good in Swift 4.0 (arc4random, weird mathy stuff)

Now: Int.random(in: 0..<10) // or Float.random(in:)

Collections now have:

greetings.randomElement()

greetings.shuffled()

Checking platform conditions

Old:

#if os(ios) || os(watchOS) || os(tvOS) #import UIKit // ...

New:

#if canImport(UIKit)

New:

#if hasTargetEnvironment(simulator)

Implicitly Unwrapped Optionals

IUO is an attribute of a declaration, not a type of an expression

Now need to be more explicit

Exclusivity Checking

Improved static and runtime checks

Swift 4.2

Lots of other improvements

Have a great day!