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