Learn Swift Quickly

Learn the fundamentals of Swift 3, the fast growing programming language used for iOS, OS X, and server side development.

Get Started Now!

Meet your expert


Ben Spratling

The day the iPhone app store opened, 3 of its apps were written by Ben, who earned his Ph.D. improving the performance of algorithms for aerospace applications. He’s contributed to lots of apps, from a handful of startups to Wolfram and DOMO. And when he’s not coding, he’s volunteering at his church.

What our customers are saying!

Daily Drip has easily been one of the most helpful resources on my journey to better understand Elixir and the Phoenix web framework.
Taylor Dolezal Software Architect
Taylor dolezal
With any language there are so many details to learn. What functions are built-in? How should I structure my code? What tools are available for improving my workflow? It’s rare to find one source that can answer so many of these questions, but DailyDrip does this and more for Elixir.
James Edward Gray II Developer
James edward gray
Daily Drip is by far the best resource for learning Elm anywhere, and among the very best online learning platforms, period.
Rex van der Spuy Author of 5 books on game development
Rex van der spuy

See what you'll get

Xcode 9's Source Control Navigator

Using the Git SCM navigator inside of Xcode 9

Debugging, Tests, and Automatic Tabs in Xcode 9

Learn how to run Xcode 9s debugger, test systems, and manage autom...

Xcode 9's Project Editor

Exploring the Project Editor inside of Xcode 9

Xcode 9's Source Editor

Learn how the Source Editor works in Xcode 9

Intro to Xcode 9

A brief introduction covering the major features of Xcode 9

Practice Networking

Round tripping JSON from Swift objects to Data to a server and back.

Common Network File Formats

Parsing JSON and XML files with Foundation types.

Survey of Server Side Swift

Addressing incompletions on Linux and unsuitability of the Dispatc...

Networking with URLSession

Configurations, requests, tasks, and responses.

Introduction to Foundation Networking

Using a `URLSession`

Practicing Concurrency

Combining multiple recipes into a realistic app

Combining Concurrent Work

Synchronizing asynchronous work without blocking.

When FIFO queues aren't FIFO

Avoiding synchronization errors when returning to the synchronizat...

Serial and Concurrent Queues

Accessing a model with concurrent-read / serial-write.

Introduction to Concurrency in Swift

The Dispatch module.

Practice Using Swift PM

Tying together our own modules, automatic dependency downloading a...

Package Dependencies

What makes the Swift Package Manager a "package manager.”

Developing for different platforms

Platform-specific platform directives.

Module Layouts

Building our own modules with the Swift Package Manager.

Introduction to the Swift Package Manager

Setup your development environment for package management

Practice Foundation

End-to-end `Data` and `Date`s


A common type for abstracting operations on arrays of bytes

Date Formatters

From `Date` to `String` and back again

Common Foundation Types

URLs, Dates and their Components

Introduction to Foundation

Types that are fundamental to computing, but not the language

Practice writing an associated type

Parallel problems ask for parallel solutions

Generics and Associated Types

Protocol associated types and generics were made for each other

No Circular Requirements

Decomposing associated types into a hierarchy.

Declaring and Conforming to Associated Types

Abstractions depending on abstractions

Introduction to Associated Types

Abstractions depending on abstractions

Practice Generics

Writing generic type, method and closures

Simple Generic Constraints & Conformances

Limiting our generic to only support specific types

Working around Hashable with AnyHashable

Type erasure as a strategy.

Reading & Using Generic Types

Preserving concrete type information

Introduction to Generics

Preserving concrete type information

Practicing Statics

Realistic `init` using statics.

Making Use of Statics

Dynamic initialization, and OptionSets.

Nested Types

Creating types within types.

Static Functions

Declaring type-members instead of instance-members.

Introduction to Statics

Defining methods and properties on types

Practice Errors

Create your own error type, throw it and catch it

Convenient Throwing

Other keywords that work well with `throws` for clean control flow.

Protocols and Throws

How to conform to protocols with `func`s that throw or not.

Error Types & Syntax

Defining and catching errors.

Introduction to Errors

When the normal flow just won't work

Practice a Protocol Extension

Add conformance to the Equatable protocol to an enum.

Extensions & Protocols

Extending types, and simulating diamond inheritance with protocols.

Default Arguments

Making a function precise and easy at the same time.

Protocol Fundamentals

Using protocols as a type.

Introduction to Protocols

Swift is a protocol-oriented language

Practice Handling Closures

Writing a type that owns and uses a closure.

Good Closures

Avoiding retain cycles in @ecaping closures and writing small, cle...

Lazy Stored Properties

Using a closure to initialize a property only when needed.

Writing Closures

Associating custom types with enum cases.

Introduction to Closures

Functions as a type.

Practicing Enums

Associating custom types with enum cases.

Associated Values

Storing different values in enum cases & writing failable initiali...

Integers as Enum RawValues

Several ways to back an enum with integers.

Enum and Switch

Defining enum types, and using them in switch.

Introduction to Enums

Representing mutually-exclusive cases.

Practice a Struct Owning a Class

Writing your own copy-on-write optimization.


How to lock down property access and overrides

Property Observers

The basis for reactibility.

Memory Management for Classes

Using Automatic Reference Counting to your advantage

Classes in Practice

Memory Management and Encapsulation.

Practicing Subclassing

Creating initializers for related types.

Class Initializers

Swift enforces Obj-C's convention of a "designated initializer"

Type Checking

Checking a class's dynamic type and conditional downcasting.

Behaviors of a Class

Inheritance, substitution, mutability & identity of reference types.

Introduction to Classes

The differences between a struct and a class.

Practicing Structs

Writing multiple initializers for a struct.

Instance Methods & Mutability

Fine-grained control over mutability on properties & methods.

Read/Write Computed Properties

Accessing your properties in a different way.

Structs: Properties

Storing and initializing properties.

Structs: Composite Values

Getting started with composite value types.

Guarding Against Crashes

Using `guard`, and an Optional tuple to avoid crashing

Rounding Out Control Flow

Ranges, For-in, & tuples for multiple return.

Default Argument Values

Making a single function easy & configurable.

guard, while and ??

Turning an Optional into a sure thing.

Deeper on Control Flow and Functions

Finish off our reference on control flow.

Practice writing a function

An exercise exploring basic function construction.

Functions Syntax

Argument names, labels and mutability.

Whitespace & Operators

How to let Swift know whether your operator is prefix, postfix or ...

Basic Flow-Control

Change flow based on Optionals.

Introduction to Flow Control

Swifter `if`, `while` and `for`.

Practice using Arrays and Dictionaries

Put `Any`thing in an array, and key by types other than `String`s.


We're going through built-in types in Swift.

Details of Built-in Numeric Types

Bitwise concerns of Swift's numeric types.

Playgrounds & Built-in Types

Learn code quickly using Xcode Playgrounds without building an ent...

The Swift Programming Language

Introduction to the Swift Programming Language.