/100DaysOfSwift

Paul Hudson's 100 Days of Swift challenge.

Header Header

100DaysOfSwift

Paul Hudson's 100 Days of Swift challenge -> https://www.hackingwithswift.com/100

  • 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
  • Setting up
  • Listing images with FileManager
  • Designing our interface

  • Day 17
  • Building a detail screen
  • Loading images with UIImage
  • Final tweaks: hidesBarsOnTap, safe area margins

  • Day 18
  • Wrap up
  • Review for Project 1: Storm Viewer

  • Day 19
  • Setting up
  • Designing your layout
  • Making the basic game work: UIButton and CALayer

  • Day 20
  • Guess which flag: random numbers
  • From outlets to actions: creating an IBAction

  • Day 21
  • Wrap up
  • Review for Project 2: Guess the Flag

  • Day 22
  • About technique projects
  • UIActivityViewController explained
  • Wrap up
  • Review for Project 3: Social media

  • Day 23
  • What you learned
  • Key points
  • Challenge

  • Day 24
  • Setting up
  • Creating a simple browser with WKWebView
  • Choosing a website: UIAlertController action sheets

  • Day 25
  • Monitoring page loads: UIToolbar and UIProgressView
  • Refactoring for the win

  • Day 26
  • Wrap up
  • Review for Project 4: Easy Browser

  • Day 27
  • Capture lists in Swift: what’s the difference between weak, strong, and unowned references?
  • Setting up
  • Reading from disk: contentsOfFile
  • Pick a word, any word: UIAlertController

  • Day 28
  • Prepare for submission: lowercased() and IndexPath
  • Checking for valid answers
  • Or else what?

  • Day 29
  • Wrap up
  • Review for Project 5: Word Scramble

  • Day 30
  • Setting up
  • Advanced Auto Layout
  • Auto Layout in code: addConstraints() with Visual Format Language

  • Day 31
  • Auto Layout metrics and priorities: constraints(withVisualFormat:)
  • Auto Layout anchors
  • Wrap up
  • Review for Project 6: Auto Layout

  • Day 32
  • What you learned
  • Key points
  • Challenge

  • Day 33
  • Setting up
  • Creating the basic UI: UITabBarController
  • Parsing JSON using the Codable protocol

  • Day 34
  • Rendering a petition: loadHTMLString
  • Finishing touches: didFinishLaunchingWithOptions

  • Day 35
  • Wrap up
  • Review for Project 7: Whitehouse Petitions

  • Day 36
  • Setting up
  • Building a UIKit user interface programmatically

  • Day 37
  • Loading a level and adding button targets
  • It's play time: firstIndex(of:) and joined()
  • Property observers: didSet

  • Day 38
  • Wrap up
  • Review for Project 8: 7 Swifty Words

  • Day 39
  • Setting up
  • Why is locking the UI bad?
  • GCD 101: async()
  • Back to the main thread: DispatchQueue.main
  • Easy GCD using performSelector(inBackground:)

  • Day 40
  • Wrap up
  • Review for Project 9: Grand Central Dispatch

  • Day 41
  • What you learned
  • Key points
  • Challenge

  • Day 42
  • Setting up
  • Designing UICollectionView cells
  • UICollectionView data sources

  • Day 43
  • Importing photos with UIImagePickerController
  • Custom subclasses of NSObject
  • Connecting up the people

  • Day 44
  • Wrap up
  • Review for Project 10: Grand Central Dispatch

  • Day 45
  • Setting up
  • Falling boxes: SKSpriteNode, UITouch, SKPhysicsBody
  • Bouncing balls: circleOfRadius

  • Day 46
  • Spinning slots: SKAction
  • Collision detection: SKPhysicsContactDelegate
  • Scores on the board: SKLabelNode

  • Day 47
  • Special effects: SKEmitterNode
  • Wrap up
  • Review for Project 11: Pachinko

  • Day 48
  • Setting up
  • Reading and writing basics: UserDefaults
  • Fixing Project 10: NSCoding

  • Day 49
  • Fixing Project 10: Codable
  • Wrap up
  • Review for Project 12: UserDefaults

  • Day 50
  • What you learned
  • Key points
  • Challenge

  • Day 51
  • Elements of Functional Programming
  • Teaching Swift at Scale

  • Day 52
  • Setting up
  • Designing the interface
  • Importing a picture

  • Day 53
  • Applying filters: CIContext, CIFilter
  • Saving to the iOS photo library

  • Day 54
  • Wrap up
  • Review for Project 13: Instafilter

  • Day 55
  • Setting up
  • Getting up and running: SKCropNode
  • Penguin, show thyself: SKAction moveBy(x:y:duration:)

  • Day 56
  • Whack to win: SKAction sequences
  • Wrap up
  • Review for Project 14: Whack-a-Penguin

  • Day 57
  • Setting up
  • Preparing for action
  • Switch, case, animate: animate(withDuration:)
  • Transform: CGAffineTransform

  • Day 58
  • Wrap up
  • Review for Project 15: Animation

  • Day 59
  • What you learned
  • Key points
  • Challenge

  • Day 60
  • Setting up
  • Up and running with MapKit
  • Annotations and accessory views: MKPinAnnotationView

  • Day 61
  • Wrap up
  • Review for Project 16: Capital Cities

  • Day 62
  • Setting up
  • Space: the final frontier
  • Bring on the enemies: linearDamping, angularDamping
  • Making contact: didBegin()

  • Day 63
  • Wrap up
  • Review for Project 17: Space Race

  • Day 64
  • Setting up
  • Basic Swift debugging using print()
  • Debugging with assert()
  • Debugging with breakpoints
  • View debugging

  • Day 65
  • Wrap up
  • Review for Project 18: Debugging

  • Day 66
  • What you learned
  • Key points
  • Challenge

  • Day 67
  • Setting up
  • Making a shell app
  • Adding an extension: NSExtensionItem
  • What do you want to get?

  • Day 68
  • Establishing communication
  • Editing multiline text with UITextView
  • Fixing the keyboard: NotificationCenter

  • Day 69
  • Wrap up
  • Review for Project 19: JavaScript Injection

  • Day 70
  • Setting up
  • Ready... aim... fire: Timer and follow()
  • Swipe to select

  • Day 71
  • Making things go bang: SKEmitterNode
  • Wrap up
  • Review for Project 20: Fireworks Night

  • Day 72
  • Setting up
  • Scheduling notifications: UNUserNotificationCenter and UNNotificationRequest
  • Acting on responses

  • Day 73
  • Wrap up
  • Review for Project 21: Local Notifications

  • Day 74
  • What you learned
  • Key points
  • Challenge

  • Day 75
  • Setting up
  • Requesting location: Core Location
  • Hunting the beacon: CLBeaconRegion

  • Day 76
  • Wrap up
  • Review for Project 22: Detect-a-Beacon

  • Day 77
  • Setting up
  • Basics quick start: SKShapeNode
  • Shaping up for action: CGPath and UIBezierPath
  • Enemy or bomb: AVAudioPlayer

  • Day 78
  • Follow the sequence
  • Slice to win
  • Game over, man: SKTexture

  • Day 79
  • Wrap up
  • Review for Project 23: Swifty Ninja

  • Day 80
  • Setting up
  • Strings are not arrays
  • Working with strings in Swift
  • Formatting strings with NSAttributedString

  • Day 81
  • Wrap up
  • Review for Project 24: Swift Strings

  • Day 82
  • What you learned
  • Key points
  • Challenge

  • Day 83
  • Setting up
  • Importing photos again
  • Going peer to peer: MCSession, MCBrowserViewController
  • Invitation only: MCPeerID

  • Day 84
  • Wrap up
  • Review for Project 25: Selfie Share

  • Day 85
  • Setting up
  • Loading a level: categoryBitMask, collisionBitMask, contactTestBitMask

  • Day 86
  • Tilt to move: CMMotionManager
  • Contacting but not colliding

  • Day 87
  • Wrap up
  • Review for Project 26: Marble Maze

  • Day 88
  • Setting up
  • Creating the sandbox
  • Drawing into a Core Graphics context with UIGraphicsImageRenderer
  • Ellipses and checkerboards
  • Transforms and lines
  • Images and text

  • Day 89
  • Wrap up
  • Review for Project 27: Core Graphics

  • Day 90
  • What you learned
  • Key points
  • Challenge

  • Day 91

  • Day 92
  • Setting up
  • The basic text editor
  • Writing somewhere safe: the iOS keychain
  • Touch to activate: Touch ID, Face ID and LocalAuthentication

  • Day 93
  • Wrap up
  • Review for Project 28: Secret Swift

  • Day 94
  • Setting up
  • Building the environment: SKTexture and filling a path
  • Mixing UIKit and SpriteKit: UISlider and SKView

  • Day 95
  • Unleash the bananas: SpriteKit texture atlases
  • Destructible terrain: presentScene

  • Day 96
  • Wrap up
  • Review for Project 29: Exploding Monkeys

  • Day 97
  • Setting up
  • What are we working with?
  • What can Instruments tell us?
  • Fixing the bugs: slow shadows
  • Fixing the bugs: wasted allocations

  • Day 98
  • Fixing the bugs: Running out of memory
  • Wrap up
  • Review for Project 30: Instruments

  • Day 99
  • What you learned
  • Key points
  • Challenge

  • Day 100
  • DONE! 99/100 exam score!!