Blog
All Posts
-
September 26th, 2023
Book Update: Thinking in SwiftUI
Updated for iOS 17 – final release
-
June 16th, 2023
Book Update: Thinking in SwiftUI
Updated for iOS 17 – beta
-
June 12th, 2023
Thinking in SwiftUI: Live Q&A
A Q&A For Our Book Release
-
April 14th, 2022
Transitions in SwiftUI
Simple but powerful
-
March 29th, 2022
Aspect Ratios in SwiftUI
A Look Below the Hood
-
March 18th, 2022
Advanced Swift: 5th edition
Now also available as hardcover
-
November 25th, 2021
Transactions and Animations
Demystifying SwiftUI's Animations
-
August 24th, 2021
Why Conditional View Modifiers are a Bad Idea
A SwiftUI anti-pattern
-
December 24th, 2020
SwiftUI Layout Explained: Free to watch!
Learn SwiftUI layout in-depth with our free video series.
-
December 17th, 2020
Book Update: Thinking in SwiftUI
Updated for iOS 14
-
November 27th, 2020
Happy Black Friday! 🛍
30% on everything until Monday
-
November 23rd, 2020
SwiftUI's Grid Views
How grids lay out their content.
-
November 10th, 2020
How an Hstack Lays out Its Children
Flexibility Defined
-
August 18th, 2020
A Fast Fuzzy Search Implementation
Our performance optimization journey
-
May 19th, 2020
SwiftUI: Running a Mac App Without an Xcode Project
A quick way to run SwiftUI from the command line
-
April 21st, 2020
SwiftUI: Showing an Alert with a Text Field
A workaround
-
March 17th, 2020
Our New Book: Thinking in SwiftUI
The completed edition is out now!
-
March 16th, 2020
SwiftUI Line Graph Animation
SwiftUI Challenge #6
-
March 10th, 2020
SwiftUI Path Animations
SwiftUI Challenge #5
-
March 5th, 2020
SwiftUI Alignment Guides
SwiftUI Challenge #4
-
February 25th, 2020
SwiftUI Tab Bar
SwiftUI Challenge #3
-
February 18th, 2020
A Signal Strength Indicator
SwiftUI Challenge #2
-
February 11th, 2020
SwiftUI Challenge #1
Building a badge view
-
February 3rd, 2020
New Book: Thinking in SwiftUI
Now available in prerelease
-
December 16th, 2019
Drawing Trees in SwiftUI
Using preferences and anchors to draw trees
-
November 5th, 2019
Static Types in SwiftUI
How the type system makes view updates more efficient
-
October 29th, 2019
SwiftUI: Setting Environment Values
A simple task tells us a lot about SwiftUI
-
October 1st, 2019
SwiftUI: Shake Animation
Shake it off, shake it off
-
September 26th, 2019
SwiftUI: Animating Timing Curves
Sampling animation values to plot timing curves
-
September 17th, 2019
Animating Explicit Changes
Applying animations to a specific property
-
September 10th, 2019
Defunctionalization
The Science Behind Reducers
-
August 20th, 2019
SwiftUI: Paths vs. Shapes
Absolute vs. relative sizing
-
August 13th, 2019
Conforming Tuples to Protocols
A workaround for the limitations of tuples
-
August 6th, 2019
Removing Dependencies
How we minimized the 3rd-party dependencies in our Swift backend
-
July 30th, 2019
Swift Quiz in Review
We learn from your responses
-
July 16th, 2019
Swift Tip: Sharing Code between Backend and Frontend
Server-side Swift with a SwiftUI client
-
July 2nd, 2019
SwiftUI: Loading Data on Demand
Using Combine to make things lazy
-
June 25th, 2019
SwiftUI: Loading Data Asynchronously
Using Tiny Networking and SwiftUI together
-
May 30th, 2019
Advanced Swift Fourth Edition, with Videos!
Updated for Swift 5, with a little extra
-
May 28th, 2019
Swift Tip: Wrapper Functions
Balancing Calls with Functions
-
May 14th, 2019
Swift Tip: Protocols vs. Values
Extensible in different ways
-
May 7th, 2019
Swift Tip: Enums vs. Protocols
Extensible in different ways
-
April 30th, 2019
Swift Tip: Reading from Standard Input/Output
How not to break Emoji and other Unicode characters
-
April 10th, 2019
Swift Tip: Unicode Scalar Properties
An alternative to CharacterSet
-
April 2nd, 2019
Swift Tip: Exhaustive Switching with Enums
An excerpt from Advanced Swift, updated for Swift 5
-
March 26th, 2019
Swift Tip: Collection Protocols
A quick overview
-
March 19th, 2019
Wrapping Third Party APIs
Using REST APIs without adding dependencies
-
March 12th, 2019
Swift Quiz
Exploring tricky Swift questions, one tweet at a time.
-
March 5th, 2019
Swift Tip: Generics vs. Any
What a generic type can tell you about the implementation
-
February 26th, 2019
Swift Tip: From Optionals to Errors
A convenience method for Optionals
-
February 19th, 2019
Updating Advanced Swift
A fourth edition, updated for Swift 5.0
-
February 12th, 2019
Open-Sourcing The Swift Talk Backend
Now written in Swift. 💫
-
February 5th, 2019
Swift Tip: An NSScanner Alternative
Scanning without a Scanner
-
January 31st, 2019
Swift Talk for Teams
Share Swift Talk with your team with our improved team subscriptions.
-
January 29th, 2019
Swift Tip: Non-Empty Collections
Even simpler non-empty optionals
-
January 22nd, 2019
Swift Tip: Non-Empty Optionals
A minor cosmetic extension
-
January 15th, 2019
Swift Tip: Atomic Variables — Part 2
Synchronized access to values, a simple solution
-
January 9th, 2019
Looking Back, Looking Forward
Our year in review
-
December 18th, 2018
Swift Tip: Atomic Variables
Providing synchronized access to values
-
December 13th, 2018
Swift Tip: Stable APIs on the Server
Pinning an API's structure without changing internal structs
-
December 11th, 2018
Give Swift Talk and Books as a Gift 🎁
Knowledge is the greatest gift
-
December 4th, 2018
Swift Tip: Unexpected Results from a Date Formatter
String to date conversions can return nil!
-
November 29th, 2018
Swift Tip: Vector Algebra with Protocols
Defining vector operations on a protocol.
-
November 26th, 2018
Happy Cyber Monday! 👨🏻💻👨🏻💻
30% off Swift Talk, for one day only
-
November 23rd, 2018
Happy Black Friday! 🛍
30% off all eBooks until Monday
-
November 20th, 2018
Swift Tip: Local Struct Definitions
Using structs within a function body
-
November 13th, 2018
Swift Tip: Custom Views Without Subclassing
Using plain functions to compose views
-
November 6th, 2018
Swift Tip: Lightweight Observation
Using didSet to observe struct properties
-
October 30th, 2018
Swift Tip: Auto Layout with Key Paths
Using Swift's Key Paths to create simple Auto Layout helpers
-
October 23rd, 2018
Swift Tip: Custom Types for Codable Conformance
Should you conform to framework types or create your own?
-
October 18th, 2018
Swift Tip: An Example Refactoring
We look at a typical refactoring from our backend rewrite
-
October 11th, 2018
Swift Tip: Refactoring to Associated Values
Using Built-in Swift Features to Simplify Your Code
-
October 2nd, 2018
Swift Tip: Using AppKit from the Command-line
Enhance Swift command-line scripts with GUI elements
-
September 18th, 2018
Swift Tip: Mixing and Matching Imperative and Functional Code
Expressing the same logic in imperative and functional ways
-
September 11th, 2018
Building a Form Library
Design goals, features and implementation
-
September 4th, 2018
Swift Tip: Switching with Associated Values
Some tips for writing concise switch statements
-
August 28th, 2018
Swift Tip: Testing Swift on Linux
Using Docker for quick tests on Linux
-
July 10th, 2018
Swift Tip: Improving Readability
The importance of micro-refactorings
-
July 3rd, 2018
Swift Tip: Notifications
An easier way to work with associated values in notifications
-
June 26th, 2018
Swift Tip: Refactoring with Deprecations
Keep your code compiling during large refactorings
-
June 19th, 2018
Swift Tip: Separating UI and Model Code
Keeping view controllers clean and understandable
-
June 14th, 2018
Swift Tip: Quick Performance Timing
Timing code without Instruments
-
June 5th, 2018
Swift Tip: Extracting Pure Functions
Moving Pure Code Out Of A View Controller
-
May 29th, 2018
Swift Tip: Type-Safe Initialization Using Storyboards (Part 2)
Instantiate view controllers in a robust, type-safe way
-
May 22nd, 2018
Swift Tip: Type-Safe Initialization using Storyboards (Part 1)
Configure view controllers in a robust, type-safe way
-
May 15th, 2018
App Architecture: Our New Book is Out!
Launching the complete edition of our new book
-
May 8th, 2018
Swift Tip: First Class Functions
Using Functions Everywhere
-
May 1st, 2018
Swift Tip: Extracting Parameters
Group Parameters into Separate Types
-
April 24th, 2018
Swift Tip: Bindings with KVO and Key Paths
Create lightweight bindings without a reactive framework
-
April 17th, 2018
Swift Tip: In-Place Map
Removing duplication in assignments
-
April 10th, 2018
Swift Tip: Local Computed Variables
Removing duplicate expressions in functions
-
April 3rd, 2018
Swift Tip: Capture Lists
Avoid reference cycles, capture the right references
-
March 27th, 2018
Swift Tip: Unwrapping Optionals
A case for careful force unwrapping
-
March 20th, 2018
Swift Tip: Lazy Infinite Sequences
Writing functional code can be natural
-
March 13th, 2018
Swift Tip: Enum Initializers
Working With A Mutable Self
-
March 6th, 2018
Swift Tip: Without Actually Escaping
How to Clean Up An API
-
February 27th, 2018
Swift Tip: Extensible Libraries with Protocols
We use protocol composition to build an extensible Markdown library
-
February 20th, 2018
Swift Tip: Enums vs Classes
The Expression Problem
-
February 13th, 2018
Swift Tip: String to Data and Back
When to force-unwrap, when to check for nil
-
February 6th, 2018
Swift Tip: Networking with Codable
Leveraging the Codable Protocol for JSON Parsing
-
January 30th, 2018
Swift Tip: OpaquePointer vs. UnsafePointer
Dealing With Pointers Imported From C
-
January 23rd, 2018
Swift Tip: Codable Enums
How to Make Any Enum Conform to Codable
-
January 19th, 2018
Our New Book: App Architecture (Early Access)
New ways to think about iOS app architecture
-
January 16th, 2018
Swift Tip: Adding a toggle Extension on Bool
Toggle a boolean in deeply nested structs
-
January 9th, 2018
Swift Tip: A Functional Interface for Imperative Code
Implementing a justified flow layout algorithm
-
January 2nd, 2018
Looking Back, Looking Forward
Our year in review
-
December 28th, 2017
Swift Tip: Weak Arrays
Using Swift arrays to only hold weak references
-
December 19th, 2017
Swift Tip: Decomposing Emoji
Why Swift, Objective-C, Ruby, and Python report different lengths for the same string
-
December 12th, 2017
Swift Tip: A Quick Tip For String Performance
This one weird trick to make string parsing 18% faster
-
December 5th, 2017
Introducing Swift Talk Collections
We're introducing Collections, a newly designed way to help you find the things you're looking for.
-
November 23rd, 2017
Swift 4 Book Updates + Discount!
All our books have been updated for Swift 4, and they're off 25% this week.
-
June 5th, 2017
WWDC 2017 Sale
25% off on all our eBooks during WWDC 2017!
-
June 2nd, 2017
Announcing: Optimizing Collections
Our new book about writing very efficient custom collections in Swift
-
February 21st, 2017
Core Data Update
We've updated our Core Data book for Swift 3 and iOS 10/macOS 10.12
-
February 6th, 2017
New Workshops + Early Bird Tickets
New workshops, dates and discounts
-
October 6th, 2016
Advanced Swift Update
We've updated our book for Swift 3
-
September 23rd, 2016
Advanced Swift Workshop in Berlin
We're organizing a Swift workshop in Berlin. Here are the details.
-
August 22nd, 2016
Announcements
Chinese Translations and Advanced Swift update
-
June 17th, 2016
Introducing Swift Talk
Follow us building Swift projects in our weekly Swift Talk videos.
-
June 13th, 2016
Happy WWDC 2016!
All our eBooks are 30% off during WWDC.
-
May 30th, 2016
Functional Swift in Japanese
Our book Functional Swift has been translated to Japanese
-
April 7th, 2016
Functional Swift in Chinese
Our book Functional Swift has been translated to Chinese
-
March 22nd, 2016
Advanced Swift, Book Bundles, and Team Licenses
Our Advanced Swift book is out! Also, we now have bundle options and team licenses for all of our books.
-
December 14th, 2015
The Core Data Book Is Out!
Available immediately as eBook and paperback.
-
October 22nd, 2015
In-House Workshops
In the first half of 2016 we're available for a limited number of in-house training workshops.
-
October 14th, 2015
Updates on Our Books
The update of Functional Programming in Swift for Swift 2 is in beta. Advanced Swift and Core Data are on the finishing straights.
-
July 28th, 2015
Core Data Early Access
Our new Core Data book is now available in early access version. Read along and comment as it evolves!
-
July 14th, 2015
Advanced Swift Early Access
We're opening the early access program for the Advanced Swift book. Read along and comment as it evolves!
-
June 5th, 2015
The new objc.io
Everything is changing — new focus, new books, and a new website. Welcome back.