GO FURTHER, FASTER: Try the Swift Career Accelerator today! >>

How it works


Welcome to the 100 Days of SwiftUI! This is a free collection of videos, tutorials, tests, and more, all drawn from around my work here on Hacking with Swift, and all designed to help you learn SwiftUI effectively.

IMPORTANT: The 100 Days of SwiftUI is now fully updated for iOS 17, which means you should be using Xcode 15.3 or later.

It’s aimed squarely at beginners who want to learn to build real iOS apps, but struggle to find a good, free course that can help them achieve their goals. If that’s you, welcome – I hope you’re ready to show the iOS world what you’re made of!

If you’re looking for my original 100 Days of Swift, click here – 100 Days of SwiftUI and 100 Days of Swift both teach you to build apps with Swift, but this one focuses on SwiftUI whereas the other teaches UIKit, SpriteKit, and more. If you’re not sure which to choose, stay here with SwiftUI.

PS: If you have questions, ask me – I’m here to help!

 

Rules

If you want to make a success of this course, there are only two rules:

  1. Every day you spend one hour reading or watching SwiftUI tutorials, or writing SwiftUI code.
  2. Every day you post about your progress to the social media site of your choosing. Tell people!

I’ll be providing all the material you need to follow along, so all you need to do is show up ready to learn. I’ve even provided a “Tweet” button at the end of every day, which composes a tweet for you saying you completed the day, and includes the hashtag to help others find you, a celebratory graphic, and a link for others to find out more – use it!

I’ve tried to make sure it takes less than one hour to complete each day, but there is a little natural variation. For example, day 4 is a little shorter because it has less ground to cover, and day 13 is a little longer because it has a few complex topics inside.

 

Tips

I’ve met so many who have tried and failed to learn Swift, often multiple times, and if you’re here there’s a good chance you’ve already had a few false starts already.

Not this time. This time you’re going to learn it for real, and in just 100 days you’ll have built many full apps that you can be proud of.

You’ve already read the two rules of these 100 days, but to maximize your chance of rocking this course I have a few tips:

  1. It’s a marathon, not a sprint. Don’t charge ahead thinking you’re “learning faster”, because there’s a high chance you’ll get lost. Take your time!
  2. Don’t fall prey to shiny object syndrome. The lure of spending $100 on another course is high, I know, but you don’t learn anything by buying books. Your best chance of success is sticking with the 100 days shown here and really make it work, so if you’re already thinking “I can do this course at the same time as Other SwiftUI Course” you’re just setting yourself up to fail.
  3. Don’t lone wolf it. You aren’t learning by yourself – I’m here to help as are many others. If you have questions, tweet me at @twostraws and I’ll do my best to help!
  4. Use the consolidation days. These are spaced throughout the 100 days to give you time to review what you’ve learned and make it really sink in. Use them to go back over days you weren’t sure about, complete any homework you missed, or just do some free coding.
  5. I have a glossary of common Swift terms that you should bookmark for easy reference.
  6. If you get stuck with some SwiftUI code, you should refer to my free online book SwiftUI by Example – it has over 600 pages of sample code and solutions for SwiftUI.
  7. Download my Unwrap app from the App Store. It works on iPhone and iPad, contains alternative tutorials for the initial part of this course, and is free with no in-app purchases.

The Course


Preparation

This introductory day prepares you for the course, explains core concepts, and helps you avoid the most common mistakes faced by other learners.

  • Day 0 – tips and advice before you start. (This will be updated for iOS 17 at the very end.)

 

Days 1-14: Introduction to Swift

The first 14 days provide a gentle warm up for your SwiftUI learning as we cover the fundamentals of the Swift programming language. You’ll work through a selection of tutorials every day, and there is some optional extra reading afterwards if you’d like to dig deeper.

Regardless of whether or not you go over the optional extra reading, you’ll find lots of short short tests – I recommend you take them to really solidify what you’ve learned.

  • [✅ iOS 17] Day 1 – Variables, constants, strings, and numbers
  • [✅ iOS 17] Day 2 – Booleans, string interpolation, and checkpoint 1
  • [✅ iOS 17] Day 3 – Arrays, dictionaries, sets, and enums
  • [✅ iOS 17] Day 4 – Type annotations and checkpoint 2
  • [✅ iOS 17] Day 5 – If, switch, and the ternary operator
  • [✅ iOS 17] Day 6 – Loops, summary, and checkpoint 3
  • [✅ iOS 17] Day 7 – Functions, parameters, and return values
  • [✅ iOS 17] Day 8 – Default values, throwing functions, and checkpoint 4
  • [✅ iOS 17] Day 9 – Closures, passing functions into functions, and checkpoint 5
  • [✅ iOS 17] Day 10 – Structs, computed properties, and property observers
  • [✅ iOS 17] Day 11 – Access control, static properties and methods, and checkpoint 6
  • [✅ iOS 17] Day 12 – Classes, inheritance, and checkpoint 7
  • [✅ iOS 17] Day 13 – Protocols, extensions, and checkpoint 8
  • [✅ iOS 17] Day 14 – Optionals, nil coalescing, and checkpoint 9

 

Day 15: Consolidation I

You just learned a lot about Swift in only 14 days, so before we continue it's important you reflect on what you've learned.

  • [✅ iOS 17] Day 15 – Swift review

 

Days 16-24: Starting SwiftUI

Now that you’ve mastered the basics of Swift, in these days you’ll start building real SwiftUI apps using what you learned.

  • [✅ iOS 17] Day 16 – Project 1, part one
  • [✅ iOS 17] Day 17 – Project 1, part two
  • [✅ iOS 17] Day 18 – Project 1, part three
  • [✅ iOS 17] Day 19 – Challenge day
  • [✅ iOS 17] Day 20 – Project 2, part one
  • [✅ iOS 17] Day 21 – Project 2, part two
  • [✅ iOS 17] Day 22 – Project 2, part three
  • [✅ iOS 17] Day 23 – Project 3, part one
  • [✅ iOS 17] Day 24 – Project 3, part two

 

Day 25: Consolidation II

In the last few days we covered some of the fundamentals of iOS development, and before we move on to the next set of projects it’s important to take a step back and review what you’ve learned.

  • [✅ iOS 17] Day 25 – Milestone: Projects 1-3

 

Days 26-34: Expanding your skills

In these next three projects we’re going to develop your SwiftUI skills in new directions, while also giving you chance to practice the fundamentals.

  • [✅ iOS 17] Day 26 – Project 4, part one
  • [✅ iOS 17] Day 27 – Project 4, part two
  • [✅ iOS 17] Day 28 – Project 4, part three
  • [✅ iOS 17] Day 29 – Project 5, part one
  • [✅ iOS 17] Day 30 – Project 5, part two
  • [✅ iOS 17] Day 31 – Project 5, part three
  • [✅ iOS 17] Day 32 – Project 6, part one
  • [✅ iOS 17] Day 33 – Project 6, part two
  • [✅ iOS 17] Day 34 – Project 6, part three

 

Day 35: Consolidation III

Now that your SwiftUI skills are starting to solidify, it’s time to review all the new things we’ve covered and get busy with another project all of your own.

  • [✅ iOS 17] Day 35 – Milestone: Projects 4-6

 

Days 36-46: Scaling up to bigger apps

Your core SwiftUI skills are strong, so it’s time to push past the basics and start building bigger apps.

  • [✅ iOS 17] Day 36 – Project 7, part one
  • [✅ iOS 17] Day 37 – Project 7, part two
  • [✅ iOS 17] Day 38 – Project 7, part three
  • [✅ iOS 17] Day 39 – Project 8, part one
  • [✅ iOS 17] Day 40 – Project 8, part two
  • [✅ iOS 17] Day 41 – Project 8, part three
  • [✅ iOS 17] Day 42 – Project 8, part four
  • [✅ iOS 17] Day 43 – Project 9, part one
  • [✅ iOS 17] Day 44 – Project 9, part two
  • [✅ iOS 17] Day 45 – Project 9, part three
  • [✅ iOS 17] Day 46 – Project 9, part four

 

Days 47-48: Consolidation IV

You’ve tackled some heavyweight skills now, so before we move on it’s time to review what has been covered, go into detail on a handful of topics, and face a fresh challenge.

  • [✅ iOS 17] Day 47 – Milestone: Projects 7-9
  • [✅ iOS 17] Day 48 – Expanding your horizons

 

Days 49-59: Focus on data

In these projects we’re going to start looking more carefully at how we can send, retrieve, and store data in our SwiftUI apps.

  • [✅ iOS 17] Day 49 – Project 10, part one
  • [✅ iOS 17] Day 50 – Project 10, part two
  • [✅ iOS 17] Day 51 – Project 10, part three
  • [✅ iOS 17] Day 52 – Project 10, part four
  • [✅ iOS 17] Day 53 – Project 11, part one
  • [✅ iOS 17] Day 54 – Project 11, part two
  • [✅ iOS 17] Day 55 – Project 11, part three
  • [✅ iOS 17] Day 56 – Project 11, part four
  • [✅ iOS 17] Day 57 – Project 12, part one
  • [✅ iOS 17] Day 58 – Project 12, part two
  • [✅ iOS 17] Day 59 – Project 12, part three

 

Days 60-61: Consolidation V

You’ve learned about data, data, and some more data, so it’s time to pause and reflect on what was covered before tackling another new challenge.

  • [✅ iOS 17] Day 60 – Milestone: Projects 10-12
  • [✅ iOS 17] Day 61 – Time for SwiftData

 

Days 62-76: Filters, maps, and more

In these projects the difficulty starts to ramp up as we look at how you integrate code from frameworks outside of SwiftUI, including Core Image and MapKit.

  • [✅ iOS 17] Day 62 – Project 13, part one
  • [✅ iOS 17] Day 63 – Project 13, part two
  • [✅ iOS 17] Day 64 – Project 13, part three
  • [✅ iOS 17] Day 65 – Project 13, part four
  • [✅ iOS 17] Day 66 – Project 13, part five
  • [✅ iOS 17] Day 67 – Project 13, part six
  • [✅ iOS 17] Day 68 – Project 14, part one
  • [✅ iOS 17] Day 69 – Project 14, part two
  • [✅ iOS 17] Day 70 – Project 14, part three
  • [✅ iOS 17] Day 71 – Project 14, part four
  • [✅ iOS 17] Day 72 – Project 14, part five
  • [✅ iOS 17] Day 73 – Project 14, part six
  • [✅ iOS 17] Day 74 – Project 15, part one
  • [✅ iOS 17] Day 75 – Project 15, part two
  • [✅ iOS 17] Day 76 – Project 15, part three

 

Days 77-78: Consolidation VI

You’ve had a difficult couple of projects as we tackled various parts of UIKit and SwiftUI integration, so let’s pause and review what was learned.

  • [✅ iOS 17] Day 77 – Milestone: Projects 13-15
  • [✅ iOS 17] Day 78 – Time for MapKit

 

Days 79-94: Controlling UI flow

In these projects we build our biggest apps yet, while also exploring more ways to let the user interact with our apps: tab bars, gestures, haptics, and more.

  • [✅ iOS 17] Day 79 – Project 16, part one
  • [✅ iOS 17] Day 80 – Project 16, part two
  • [✅ iOS 17] Day 81 – Project 16, part three
  • [✅ iOS 17] Day 82 – Project 16, part four
  • [✅ iOS 17] Day 83 – Project 16, part five
  • [✅ iOS 17] Day 84 – Project 16, part six
  • [✅ iOS 17] Day 85 – Project 16, part seven
  • [✅ iOS 17] Day 86 – Project 17, part one
  • [✅ iOS 17] Day 87 – Project 17, part two
  • [✅ iOS 17] Day 88 – Project 17, part three
  • [✅ iOS 17] Day 89 – Project 17, part four
  • [✅ iOS 17] Day 90 – Project 17, part five
  • [✅ iOS 17] Day 91 – Project 17, part six
  • [✅ iOS 17] Day 92 – Project 18, part one
  • [✅ iOS 17] Day 93 – Project 18, part two
  • [✅ iOS 17] Day 94 – Project 18, part three

 

Days 95: Consolidation VII

As we approach the end of our 100 days it’s time to pause and reflect on the massive projects we’ve built, then take on a fresh app building challenge.

  • [✅ iOS 17] Day 95 – Milestone: Projects 16-18

 

Days 96-99: One last project

In this final project we cover some last tips and techniques to help you build great apps, including how to optimize for iPad.

  • [✅ iOS 17] Day 96 – Project 19, part one
  • [✅ iOS 17] Day 97 – Project 19, part two
  • [✅ iOS 17] Day 98 – Project 19, part three
  • [✅ iOS 17] Day 99 – Project 19, part four

 

Wrap up

It’s time to see how much you remember from across the entire curriculum. Are you ready for this?

 

 

Hacking with Swift is sponsored by RevenueCat.

SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's Paywalls allow you to remotely configure and A/B test your entire paywall UI without any code changes or app updates.

Learn more here

Sponsor Hacking with Swift and reach the world's largest Swift community!

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.