Adding a tab bar wasn’t part of Day 45, but I wanted to keep my other view and start “fresh” with today’s code. We actually went through navigationBarTitleDisplayMode(), toolbarBackground(), toolbarColorScheme(), toolbar(), ToolbarItem, and passing bindings to navigationTitle(). #100DaysOfSwiftUI

An iOS simulator displays a list interface with rows labeled from Row 0 to Row 14. The top navigation bar shows an editable title “SwiftUI” with Cancel, Confirm, and Destroy buttons. The bottom tab bar shows the current view and one other tab.

For Day 44 I made this abomination while learning the ins and outs of NavigationPath. #100DaysOfSwiftUI

An iOS simulator displays the text “Number: 0” at the top. Below are three clickable links labeled “Go to Random Number,” “Push 556,” and “Push Hello.” A list follows with options labeled Select Number and Select String, each paired with a value from 0 to 4.

I had been wondering about how to only load detail views when they’re navigated to, and in Day 43 I got my answer! Hello navigationDestination(for:destination:) 👋 #100DaysOfSwiftUI


Day 42 (hey!) is a challenge day and I am taking it easy with just a refactoring of some views and not adding a brand new list view (with a toggle between it and the grid view). 🇺🇸 #100DaysOfSwiftUI


Day 41 was our last day of adding pre-made #100DaysOfSwiftUI code to this Moonshot project. Tomorrow, challenge!

I really appreciate Xcode’s previews. It reminds me of the love I professed for demo files in my CSS-Tricks “modlets” article years ago.

An iOS simulator displays the Moonshot app with a biography of astronaut James A. Lovell Jr. at the top. Lovell, wearing a spacesuit with a U.S. flag patch, smiles beside a model of the Moon. Text below details his NASA missions, including Apollo 13 and two Gemini flights.

For Day 40 we put into practice what we learned yesterday by starting the implementation of the Moonshot app. Pretty cool that #100DaysOfSwiftUI provides sample data and images to build more interesting-looking apps like this one.

An iOS simulator displays the Moonshot app with mission patches and dates for Apollo missions. Each mission is in a card format, with the patch at the top, mission name below, and launch date at the bottom. The visible missions include Apollo 1 through Apollo 11 with more displayed offscreen.

We’re starting a new “Moonshot” project for Day 39 and learning about Image resizing, LazyVStack, LazyHStack, LazyVGrid, LazyHGrid, NavigationLink, and decoding hierarchical data with Codable.

I wonder about learning optimizations like the Lazy versions of Stack/Grid so early on. #100DaysOfSwiftUI


Day 38 included a quiz and some prompts for us to add features on our own to the app, which included coloring the expense amounts and adding the separate Business/Personal sections (while still keeping support for deleting expenses in those new sections)! #100DaysOfSwiftUI

An iOS simulator displays the iExpense app, listing expenses under “Business” and “Personal” categories. Business items include “Phone” and “Travel” with costs in blue and purple. Personal items are “Haircut” and “Parking” with costs in blue and orange.

I got my flu shot and COVID booster yesterday morning and paid for it with fever dreams last night. I have always had a strong reaction to the COVID vaccine.

The iOS Health app showing a Vitals graph with three high outliers in pink (Heart Rate, Respiratory Rate, and Wrist Temperature) and one typical value in blue (Sleep Duration) on November 2, 2024.The iOS Sleep++ tracking app displays showing an 8-hour, 58-minute sleep period from 10:52 p.m. to 7:50 a.m. with stages divided as awake for 2 hours 31 minutes, REM for 0 minutes, core sleep for 6 hours 11 minutes, and deep sleep for 17 minutes. Most of the “awake” graph shows sleep interruptions every 10-20 minutes, with a large block awake for almost an hour at 1:50 a.m.


Day 37, using the APIs we learned yesterday in a new app, but this stood out to me (emphasis mine):

First, we need to decide what an expense is – what do we want it to store? In this instance it will be three things: the name of the item, whether it’s business or personal, and its cost as a Double.

In a real app, you should almost always keep prices as integers so math with them is accurate.

As a training creator, I know there’s a trade-off between having “production-ready” code vs. simplifying it for learning.

This is a case where I would have made a different decision. #100DaysOfSwiftUI


Day 36 is the start of a new project, and thus a day of learning new APIs: @Observable with class, .sheet(), @Environment, .onDelete(), UserDefaults / @AppStorage, Codable, and JSONEncoder.

I would’ve liked more info about @Environment but I’m sure we’ll get into it more soon. #100DaysOfSwiftUI


I finished the Day 35 challenge today. It’s been a while since I’ve been “challenged” when programming, so this was a great reminder to stay humble while learning something new. #100DaysOfSwiftUI

An iOS simulator displays a question asking “What is 4 times 2” with the answer “8” typed below. A blue “Submit” button is under the text field. The bottom shows “5 / 5” in small text.

Yesterday I looked at the Day 35 challenge (build a new app from just a description, no code) and I was like “nope, don’t have the energy today.”

I worked on it for ~45 minutes tonight and started off strong, but I’ve run into some errors that I’ll have to come back to tomorrow. #100DaysOfSwiftUI


Day 34 was a quiz and challenge day where we went back to one of our previous projects and added animations on our own. I really liked the challenge because I wasn’t expecting to go back to a previous project! #100DaysOfSwiftUI

An iOS simulator displays the “Guess the Flag” app from Day 22. The prompt reads “Tap the flag of US” with the United States flag selected. A pop-up says “Correct” with “Your score is 1” and a “Continue” button below. Current score displays as 1.

Day 33… continuing with animations and I swear this is more fun than it looks from a single screenshot. #100DaysOfSwiftUI

An iOS simulator displays an app with a large orange gradient rectangle at the top, a red banner saying “Hello SwiftUI” below it, a blue “Tap Me” link, and two stacked squares beneath, one red and one orange.

Yes, I do embrace absolute chaos when I’m first trying the provided sample code so I can keep playing with older examples as I’m learning more intricate modifiers. Day 32 in the books! #100DaysOfSwiftUI

An iOS simulator displays a simple app interface with the text “Hello, world” below a globe icon. Three red buttons labeled “Tap Me” are stacked vertically. A “Scale amount” stepper control (with minus and plus buttons) is shown near the second button to adjust the size. The second button has a ring around it from animating in size.

Day 31 was a challenge day where we took a test and had to update our app with only some requirements and no code hints. I extended mine to show a score based on the number of letters in each correct guess. #100DaysOfSwiftUI

An iOS simulator displays a word game interface. The word “bedrooms” is displayed at the top, with a text field prompting the user to “Enter your word.” Below is a list of valid words with their character counts. The total score is 51.

Back on it after being sick the last couple days… for day 30, we mostly copied code from the tutorial, but I find it very useful to type everything out to get that muscle memory built up.

Here’s a little game where you have to type words that are a subset of a random word. #100DaysOfSwiftUI

An iOS simulator displays a word puzzle game with the word “cherries” at the top. Below is a text box labeled “Enter your word” followed by a list of correct guesses that the player has made: “sire,” “cher,” “chris,” “sir,” “rice,” and “her.” Each word has the number of characters in the word next to it.

Day 29 is bringing me back to my Objective-C days:

let range = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en")

The full rangeOfMisspelledWordInString:range:startingAt:wrap:language: API signature is too long for this post. #100DaysOfSwiftUI


Day 28 was straightforward—a review quiz and some challenges for us to modify our most recent app. Onward! #100DaysOfSwiftUI

An iOS simulator displays an app called BetterRest. The user has set a wake-up time of 7:15 AM, a desired sleep duration of 7.5 hours, and a daily coffee intake of 3 cups. The calculated ideal bedtime is 10:55 PM. There is no pop-up or OK button visible.