Blog
All Posts
- 
							September 26th, 2023 Book Update: Thinking in SwiftUIUpdated for iOS 17 – final release 
- 
							June 16th, 2023 Book Update: Thinking in SwiftUIUpdated for iOS 17 – beta 
- 
							June 12th, 2023 Thinking in SwiftUI: Live Q&AA Q&A For Our Book Release 
- 
							April 14th, 2022 Transitions in SwiftUISimple but powerful 
- 
							March 29th, 2022 Aspect Ratios in SwiftUIA Look Below the Hood 
- 
							March 18th, 2022 Advanced Swift: 5th editionNow also available as hardcover 
- 
							November 25th, 2021 Transactions and AnimationsDemystifying SwiftUI's Animations 
- 
							August 24th, 2021 Why Conditional View Modifiers are a Bad IdeaA 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 SwiftUIUpdated for iOS 14 
- 
							November 27th, 2020 Happy Black Friday! 🛍30% on everything until Monday 
- 
							November 23rd, 2020 SwiftUI's Grid ViewsHow grids lay out their content. 
- 
							November 10th, 2020 How an Hstack Lays out Its ChildrenFlexibility Defined 
- 
							August 18th, 2020 A Fast Fuzzy Search ImplementationOur performance optimization journey 
- 
							May 19th, 2020 SwiftUI: Running a Mac App Without an Xcode ProjectA quick way to run SwiftUI from the command line 
- 
							April 21st, 2020 SwiftUI: Showing an Alert with a Text FieldA workaround 
- 
							March 17th, 2020 Our New Book: Thinking in SwiftUIThe completed edition is out now! 
- 
							March 16th, 2020 SwiftUI Line Graph AnimationSwiftUI Challenge #6 
- 
							March 10th, 2020 SwiftUI Path AnimationsSwiftUI Challenge #5 
- 
							March 5th, 2020 SwiftUI Alignment GuidesSwiftUI Challenge #4 
- 
							February 25th, 2020 SwiftUI Tab BarSwiftUI Challenge #3 
- 
							February 18th, 2020 A Signal Strength IndicatorSwiftUI Challenge #2 
- 
							February 11th, 2020 SwiftUI Challenge #1Building a badge view 
- 
							February 3rd, 2020 New Book: Thinking in SwiftUINow available in prerelease 
- 
							December 16th, 2019 Drawing Trees in SwiftUIUsing preferences and anchors to draw trees 
- 
							November 5th, 2019 Static Types in SwiftUIHow the type system makes view updates more efficient 
- 
							October 29th, 2019 SwiftUI: Setting Environment ValuesA simple task tells us a lot about SwiftUI 
- 
							October 1st, 2019 SwiftUI: Shake AnimationShake it off, shake it off 
- 
							September 26th, 2019 SwiftUI: Animating Timing CurvesSampling animation values to plot timing curves 
- 
							September 17th, 2019 Animating Explicit ChangesApplying animations to a specific property 
- 
							September 10th, 2019 DefunctionalizationThe Science Behind Reducers 
- 
							August 20th, 2019 SwiftUI: Paths vs. ShapesAbsolute vs. relative sizing 
- 
							August 13th, 2019 Conforming Tuples to ProtocolsA workaround for the limitations of tuples 
- 
							August 6th, 2019 Removing DependenciesHow we minimized the 3rd-party dependencies in our Swift backend 
- 
							July 30th, 2019 Swift Quiz in ReviewWe learn from your responses 
- 
							July 16th, 2019 Swift Tip: Sharing Code between Backend and FrontendServer-side Swift with a SwiftUI client 
- 
							July 2nd, 2019 SwiftUI: Loading Data on DemandUsing Combine to make things lazy 
- 
							June 25th, 2019 SwiftUI: Loading Data AsynchronouslyUsing 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 FunctionsBalancing Calls with Functions 
- 
							May 14th, 2019 Swift Tip: Protocols vs. ValuesExtensible in different ways 
- 
							May 7th, 2019 Swift Tip: Enums vs. ProtocolsExtensible in different ways 
- 
							April 30th, 2019 Swift Tip: Reading from Standard Input/OutputHow not to break Emoji and other Unicode characters 
- 
							April 10th, 2019 Swift Tip: Unicode Scalar PropertiesAn alternative to CharacterSet 
- 
							April 2nd, 2019 Swift Tip: Exhaustive Switching with EnumsAn excerpt from Advanced Swift, updated for Swift 5 
- 
							March 26th, 2019 Swift Tip: Collection ProtocolsA quick overview 
- 
							March 19th, 2019 Wrapping Third Party APIsUsing REST APIs without adding dependencies 
- 
							March 12th, 2019 Swift QuizExploring tricky Swift questions, one tweet at a time. 
- 
							March 5th, 2019 Swift Tip: Generics vs. AnyWhat a generic type can tell you about the implementation 
- 
							February 26th, 2019 Swift Tip: From Optionals to ErrorsA convenience method for Optionals 
- 
							February 19th, 2019 Updating Advanced SwiftA fourth edition, updated for Swift 5.0 
- 
							February 12th, 2019 Open-Sourcing The Swift Talk BackendNow written in Swift. 💫 
- 
							February 5th, 2019 Swift Tip: An NSScanner AlternativeScanning without a Scanner 
- 
							January 31st, 2019 Swift Talk for TeamsShare Swift Talk with your team with our improved team subscriptions. 
- 
							January 29th, 2019 Swift Tip: Non-Empty CollectionsEven simpler non-empty optionals 
- 
							January 22nd, 2019 Swift Tip: Non-Empty OptionalsA minor cosmetic extension 
- 
							January 15th, 2019 Swift Tip: Atomic Variables — Part 2Synchronized access to values, a simple solution 
- 
							January 9th, 2019 Looking Back, Looking ForwardOur year in review 
- 
							December 18th, 2018 Swift Tip: Atomic VariablesProviding synchronized access to values 
- 
							December 13th, 2018 Swift Tip: Stable APIs on the ServerPinning 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 FormatterString to date conversions can return nil! 
- 
							November 29th, 2018 Swift Tip: Vector Algebra with ProtocolsDefining 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 DefinitionsUsing structs within a function body 
- 
							November 13th, 2018 Swift Tip: Custom Views Without SubclassingUsing plain functions to compose views 
- 
							November 6th, 2018 Swift Tip: Lightweight ObservationUsing didSet to observe struct properties 
- 
							October 30th, 2018 Swift Tip: Auto Layout with Key PathsUsing Swift's Key Paths to create simple Auto Layout helpers 
- 
							October 23rd, 2018 Swift Tip: Custom Types for Codable ConformanceShould you conform to framework types or create your own? 
- 
							October 18th, 2018 Swift Tip: An Example RefactoringWe look at a typical refactoring from our backend rewrite 
- 
							October 11th, 2018 Swift Tip: Refactoring to Associated ValuesUsing Built-in Swift Features to Simplify Your Code 
- 
							October 2nd, 2018 Swift Tip: Using AppKit from the Command-lineEnhance Swift command-line scripts with GUI elements 
- 
							September 18th, 2018 Swift Tip: Mixing and Matching Imperative and Functional CodeExpressing the same logic in imperative and functional ways 
- 
							September 11th, 2018 Building a Form LibraryDesign goals, features and implementation 
- 
							September 4th, 2018 Swift Tip: Switching with Associated ValuesSome tips for writing concise switch statements 
- 
							August 28th, 2018 Swift Tip: Testing Swift on LinuxUsing Docker for quick tests on Linux 
- 
							July 10th, 2018 Swift Tip: Improving ReadabilityThe importance of micro-refactorings 
- 
							July 3rd, 2018 Swift Tip: NotificationsAn easier way to work with associated values in notifications 
- 
							June 26th, 2018 Swift Tip: Refactoring with DeprecationsKeep your code compiling during large refactorings 
- 
							June 19th, 2018 Swift Tip: Separating UI and Model CodeKeeping view controllers clean and understandable 
- 
							June 14th, 2018 Swift Tip: Quick Performance TimingTiming code without Instruments 
- 
							June 5th, 2018 Swift Tip: Extracting Pure FunctionsMoving 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 FunctionsUsing Functions Everywhere 
- 
							May 1st, 2018 Swift Tip: Extracting ParametersGroup Parameters into Separate Types 
- 
							April 24th, 2018 Swift Tip: Bindings with KVO and Key PathsCreate lightweight bindings without a reactive framework 
- 
							April 17th, 2018 Swift Tip: In-Place MapRemoving duplication in assignments 
- 
							April 10th, 2018 Swift Tip: Local Computed VariablesRemoving duplicate expressions in functions 
- 
							April 3rd, 2018 Swift Tip: Capture ListsAvoid reference cycles, capture the right references 
- 
							March 27th, 2018 Swift Tip: Unwrapping OptionalsA case for careful force unwrapping 
- 
							March 20th, 2018 Swift Tip: Lazy Infinite SequencesWriting functional code can be natural 
- 
							March 13th, 2018 Swift Tip: Enum InitializersWorking With A Mutable Self 
- 
							March 6th, 2018 Swift Tip: Without Actually EscapingHow to Clean Up An API 
- 
							February 27th, 2018 Swift Tip: Extensible Libraries with ProtocolsWe use protocol composition to build an extensible Markdown library 
- 
							February 20th, 2018 Swift Tip: Enums vs ClassesThe Expression Problem 
- 
							February 13th, 2018 Swift Tip: String to Data and BackWhen to force-unwrap, when to check for nil 
- 
							February 6th, 2018 Swift Tip: Networking with CodableLeveraging the Codable Protocol for JSON Parsing 
- 
							January 30th, 2018 Swift Tip: OpaquePointer vs. UnsafePointerDealing With Pointers Imported From C 
- 
							January 23rd, 2018 Swift Tip: Codable EnumsHow 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 BoolToggle a boolean in deeply nested structs 
- 
							January 9th, 2018 Swift Tip: A Functional Interface for Imperative CodeImplementing a justified flow layout algorithm 
- 
							January 2nd, 2018 Looking Back, Looking ForwardOur year in review 
- 
							December 28th, 2017 Swift Tip: Weak ArraysUsing Swift arrays to only hold weak references 
- 
							December 19th, 2017 Swift Tip: Decomposing EmojiWhy Swift, Objective-C, Ruby, and Python report different lengths for the same string 
- 
							December 12th, 2017 Swift Tip: A Quick Tip For String PerformanceThis one weird trick to make string parsing 18% faster 
- 
							December 5th, 2017 Introducing Swift Talk CollectionsWe'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 Sale25% off on all our eBooks during WWDC 2017! 
- 
							June 2nd, 2017 Announcing: Optimizing CollectionsOur new book about writing very efficient custom collections in Swift 
- 
							February 21st, 2017 Core Data UpdateWe've updated our Core Data book for Swift 3 and iOS 10/macOS 10.12 
- 
							February 6th, 2017 New Workshops + Early Bird TicketsNew workshops, dates and discounts 
- 
							October 6th, 2016 Advanced Swift UpdateWe've updated our book for Swift 3 
- 
							September 23rd, 2016 Advanced Swift Workshop in BerlinWe're organizing a Swift workshop in Berlin. Here are the details. 
- 
							August 22nd, 2016 AnnouncementsChinese Translations and Advanced Swift update 
- 
							June 17th, 2016 Introducing Swift TalkFollow 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 JapaneseOur book Functional Swift has been translated to Japanese 
- 
							April 7th, 2016 Functional Swift in ChineseOur book Functional Swift has been translated to Chinese 
- 
							March 22nd, 2016 Advanced Swift, Book Bundles, and Team LicensesOur 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 WorkshopsIn the first half of 2016 we're available for a limited number of in-house training workshops. 
- 
							October 14th, 2015 Updates on Our BooksThe 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 AccessOur new Core Data book is now available in early access version. Read along and comment as it evolves! 
- 
							July 14th, 2015 Advanced Swift Early AccessWe're opening the early access program for the Advanced Swift book. Read along and comment as it evolves! 
- 
							June 5th, 2015 The new objc.ioEverything is changing — new focus, new books, and a new website. Welcome back.