100 Days Of SwiftUI Challenge by Paul Hudson -> https://www.hackingwithswift.com/100/swiftui
- Day 1
- Variables.
- Strings and integers.
- Multi-line strings.
- Doubles and booleans.
- String interpolation.
- Constants.
- Type annotations.
- Simple types: Summary.
- Day 2
- Arrays.
- Sets.
- Tuples.
- Arrays vs sets vs tuples.
- Dictionaries.
- Dictionary default values.
- Creating empty collections.
- Enumerations.
- Enum associated values.
- Enum raw values.
- Complex types: Summary.
- Day 3
- Arithmetic Operators.
- Operator overloading.
- Compound assignment operators.
- Comparison operators.
- Conditions.
- Combining conditions.
- The ternary operator.
- Switch statements.
- Range operators.
- Operators and conditions summary.
- Day 4
- For loops.
- While loops.
- Repeat loops.
- Exiting loops.
- Exiting multiple.
- Skipping items.
- Infinite loops.
- Looping summary.
- Day 5
- Writing functions.
- Accepting parameters.
- Returning values.
- Parameter labels.
- Omitting parameter labels.
- Default parameters.
- Variadic functions.
- Writing throwing functions.
- Running throwing functions.
- inout parameters.
- Functions summary.
- Day 6
- Creating basic closures
- Accepting parameters in a closure
- Returning values from a closure
- Closures as parameters
- Trailing closure syntax
- Day 7
- Using closures as parameters when they accept parameters
- Using closures as parameters when they return values
- Shorthand parameter names
- Closures with multiple parameters
- Returning closures from functions
- Capturing values
- Closures summary
- Day 8
- Creating your own structs
- Computed properties
- Property observers
- Methods
- Mutating methods
- Properties and methods of strings
- Properties and methods of arrays
- Day 9
- Initializers
- Referring to the current instance
- Lazy properties
- Static properties and methods
- Access control
- Structs summary
- Day 10
- Creating your own classes
- Class inheritance
- Overriding methods
- Final classes
- Copying objects
- Deinitializers
- Mutability
- Classes summary
- Day 11
- Protocols
- Protocol inheritance
- Extensions
- Protocol extensions
- Protocol-oriented programming
- Protocols and extensions summary
- Day 12
- Handling missing data
- Unwrapping optionals
- Unwrapping with guard
- Force unwrapping
- Implicitly unwrapped optionals
- Nil coalescing
- Optional chaining
- Optional try
- Failable initializers
- Typecasting
- Optionals summary
- Day 13
- Variables and constants
- Types of Data
- Operators
- String interpolation
- Arrays
- Dictionaries
- Conditional statements
- Loops
- Switch case
REVIEW DAY
- Day 14
- Functions
- Optionals
- Optional chaining
- Enumerations
- Structs
- Classes
- Day 15
- Properties
- Static properties and methods
- Access control
- Polymorphism and typecasting
- Closures
- Day 16
- WeSplit: Introduction
- Understanding the basic structure of a SwiftUI app
- Creating a form
- Adding a navigation bar
- Modifying program state
- Binding state to user interface controls
- Creating views in a loop
- Day 17
- Reading text from the user with TextField
- Creating pickers in a form
- Adding a segmented control for tip percentages
- Calculating the total per person
- Day 18
- WeSplit - *Challenges
- Day 19
- Converter app **MILESTONE
- Day 20
- Guess the Flag
- Day 21
- Guess the Flag
- Day 22
- Guess the Flag - *Challenges
- Day 23
- Views and modifiers: Introduction
- Why does SwiftUI use structs for views?
- What is behind the main SwiftUI view?
- Why modifier order matters
- Why does SwiftUI use “some View” for its view type?
- Conditional modifiers
- Environment modifiers
- Views as properties
- View composition
- Custom modifiers
- Custom containers
- Day 24
- Views and Modifiers
- Day 25
- Rock, Paper, or Scissors **MILESTONE
- Day 26
- BetterRest: coreML project
- Day 27
- BetterRest: coreML project
- Day 28
- BetterRest: coreML project - *Challenges
- Day 29
- Word Scramble
- Day 30
- Word Scramble
- Day 31
- Word Scramble - *Challenges
- Day 32
- Animations
- Day 33
- Animations
- Day 34
- Animations - *Challenges
- Day 35
- Consolidation
- Day 36
- iExpense
- Day 37
- iExpense
- Day 38
- iExpense - *Challenges
- Day 39
- Moonshot - Introduction
- Day 40
- Moonshot
- Day 41
- Moonshot
- Day 42
- Moonshot - *Challenges
- Day 43
- Drawing day 1
- Day 44
- Drawing day 2
- Day 45
- Drawing day 3
- Day 46
- Drawing day - *Challenges
- Day 47
- iHabit **MILESTONE
- Day 48
- Video - Expanding your horizons
- Day 49
- CupcakeCorner
- Day 50
- CupcakeCorner
- Day 51
- CupcakeCorner
- Day 52
- CupcakeCorner
- Day 53
- CupcakeCorner - *Challenges
- Day 54
- BookWorm
- Day 55
- BookWorm
- Day 56
- BookWorm - *Challenges
- Day 57
- CoreData
- Day 58
- CoreData
- Day 59
- CoreData - *Challenges
- Day 60
- FriendFace **MILESTONE
- Day 61
- CoreData - *NOT DONE
- Day 62
- InstaFilter
- Day 63
- InstaFilter
- Day 64
- InstaFilter
- Day 65
- InstaFilter
- Day 66
- InstaFilter
- Day 67
- InstaFilter - *Challenges
- Day 68
- BucketList
- Day 69
- BucketList
- Day 70
- BucketList
- Day 71
- BucketList
- Day 72
- BucketList
- Day 73
- BucketList - *Challenges
- Day 74
- Accessibility
- Day 75
- Accessibility
- Day 76
- Accessibility
- Day 77
- NameFace **MILESTONE
- Day 78
- NameFace **MILESTONE+MAP
- Day 79
- Hot Prospects
- Day 80
- Hot Prospects
- Day 81
- Hot Prospects
- Day 82
- Hot Prospects
- Day 83
- Hot Prospects
- Day 84
- Hot Prospects
- Day 85
- Hot Prospects - *Challenges
- Day 86
- Flashzilla
- Day 87
- Flashzilla
- Day 88
- Flashzilla
- Day 89
- Flashzilla
- Day 90
- Flashzilla
- Day 91
- Flashzilla - *Challenges
- Day 92
- Layout and geometry
- Day 93
- Layout and geometry
- Day 94
- Layout and geometry - *Challenges
- Day 95
- DICE **MILESTONE
- Day 96
- SnowSeeker
- Day 97
- SnowSeeker
- Day 98
- SnowSeeker
- Day 99
- SnowSeeker - *Challenges
- Day 100 FINAL EXAM - Distinction!