{"id":19590645,"url":"https://github.com/aaron-22766/hacking-with-swift","last_synced_at":"2026-05-12T22:39:25.606Z","repository":{"id":240098413,"uuid":"801665706","full_name":"aaron-22766/Hacking-With-Swift","owner":"aaron-22766","description":"Learning Swift, SwiftUI and Xcode following the wonderful tutorials from Paul Hudson over at hackingwithswift.com","archived":false,"fork":false,"pushed_at":"2025-01-17T21:41:23.000Z","size":310,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-17T22:32:36.528Z","etag":null,"topics":["100daysofswiftui","apple","apps","hackingwithswift","ios","iphone","swift","swiftui","xcode"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aaron-22766.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-16T17:14:05.000Z","updated_at":"2025-01-17T21:41:24.000Z","dependencies_parsed_at":"2024-05-20T20:33:56.239Z","dependency_job_id":"609a3c35-1817-4cc7-8627-d6e7f677aede","html_url":"https://github.com/aaron-22766/Hacking-With-Swift","commit_stats":null,"previous_names":["aaron-22766/hacking-with-swift"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaron-22766%2FHacking-With-Swift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaron-22766%2FHacking-With-Swift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaron-22766%2FHacking-With-Swift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaron-22766%2FHacking-With-Swift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aaron-22766","download_url":"https://codeload.github.com/aaron-22766/Hacking-With-Swift/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240864773,"owners_count":19870016,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["100daysofswiftui","apple","apps","hackingwithswift","ios","iphone","swift","swiftui","xcode"],"created_at":"2024-11-11T08:25:48.824Z","updated_at":"2026-05-12T22:39:20.579Z","avatar_url":"https://github.com/aaron-22766.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hacking With Swift\n\nLearning Swift, SwiftUI and Xcode following the wonderful tutorials from Paul Hudson over at [hackingwithswift.com](https://www.hackingwithswift.com).\n\n## Basics of Swift\n\nThe 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. Checkpoints will challenge you to write your own solution to a problem with all the knowledge you have gathered in the previous tutorials.\n\n- Day 1: Variables, constants, strings, and numbers\n- Day 2: Booleans, string interpolation, and checkpoint 1\n- Day 3: Arrays, dictionaries, sets, and enums\n- Day 4: Type annotations and checkpoint 2\n- Day 5: If, switch, and the ternary operator\n- Day 6: Loops, summary, and checkpoint 3\n- Day 7: Functions, parameters, and return values\n- Day 8: Default values, throwing functions, and checkpoint 4\n- Day 9: Closures, passing functions into functions, and checkpoint 5\n- Day 10: Structs, computed properties, and property observers\n- Day 11: Access control, static properties and methods, and checkpoint 6\n- Day 12: Classes, inheritance, and checkpoint 7\n- Day 13: Protocols, extensions, and checkpoint 8\n- Day 14: Optionals, nil coalescing, and checkpoint 9\n- Day 15: Swift Review\n\n## Projects Overview\n\n| Project Desctiption | Showcase |\n|---------------------|----------|\n| \u003ch2\u003eProject 1: WeSplit (Day 16-18)\u003c/h2\u003eThis project is a check-sharing app that calculates how to split a check based on the numbers of people and how much tip you want to leave. The project in itself isn’t complicated, but we’ll be taking it slow so you can see exactly how these fundamentals fit together.\u003cbr\u003e\u003cbr\u003e**Steps and learnings:**\u003cul\u003e \u003cli\u003eUnderstanding the basic structure of a SwiftUI app\u003c/li\u003e \u003cli\u003eCreating a form\u003c/li\u003e \u003cli\u003eAdding a navigation bar\u003c/li\u003e \u003cli\u003eModifying program state\u003c/li\u003e \u003cli\u003eBinding state to user interface controls\u003c/li\u003e \u003cli\u003eCreating views in a loop\u003c/li\u003e \u003cli\u003eReading text from the user with TextField\u003c/li\u003e \u003cli\u003eCreating pickers in a form\u003c/li\u003e \u003cli\u003eAdding a segmented control for tip percentages\u003c/li\u003e \u003cli\u003eCalculating the total per person\u003c/li\u003e \u003cli\u003eHiding the keyboard\u003c/li\u003e \u003c/ul\u003e **Additional work:** \u003cul\u003e \u003cli\u003eCustom percentage text field appears if chosen in segmented picker\u003c/li\u003e \u003c/ul\u003e | \u003cimg src=\"https://github.com/aaron-22766/Hacking-With-Swift/assets/79376206/5d425f81-3a10-4b51-8885-de677f92d1cc\" width=\"150\"/\u003e |\n| \u003ch2\u003eChallenge Day: Unit Converter (Day 19)\u003c/h2\u003eYou need to build an app that handles unit conversions: users will select an input unit and an output unit, then enter a value, and see the output of the conversion.\u003cbr\u003e\u003cbr\u003e**Steps and Learnings:**\u003cul\u003e\u003cli\u003eForm, Picker, TextField\u003c/li\u003e\u003c/ul\u003e **Additional work:**\u003cul\u003e \u003cli\u003eApp lets you choose which unit type to convert\u003c/li\u003e \u003cli\u003eUsing Unit types and Measurement for conversion\u003c/li\u003e \u003c/ul\u003e | \u003cimg src=\"https://github.com/aaron-22766/Hacking-With-Swift/assets/79376206/133ac535-5277-4d5b-9e70-8a0b85c5b8a9\" width=\"150\"/\u003e |\n| \u003ch2\u003eProject 2: GuessTheFlag (Day 20-22)\u003c/h2\u003eIn this second SwiftUI project we’re going to be building a guessing game that helps users learn some of the many flags of the world. This project is still going to be nice and easy, but gives me chance to introduce you to whole range of new SwiftUI functionality: stacks, buttons, images, alerts, asset catalogs, and more.\u003cbr\u003e\u003cbr\u003e**Steps and Learnings:**\u003cul\u003e\u003cli\u003eUsing stacks to arrange views\u003c/li\u003e\u003cli\u003eColors and frames\u003c/li\u003e\u003cli\u003eGradients\u003c/li\u003e\u003cli\u003eButtons and images\u003c/li\u003e\u003cli\u003eShowing alert messages\u003c/li\u003e\u003cli\u003eStacking up buttons\u003c/li\u003e\u003cli\u003eShowing the player’s score with an alert\u003c/li\u003e\u003cli\u003eStyling our flags\u003c/li\u003e\u003cli\u003eUpgrading our design\u003c/li\u003e\u003c/ul\u003e**Additional Work:**\u003cul\u003e\u003cli\u003eColors change with appearance\u003c/li\u003e\u003cli\u003eRestart button\u003c/li\u003e\u003c/ul\u003e | \u003cimg src=\"https://github.com/aaron-22766/Hacking-With-Swift/assets/79376206/e859b905-ee73-4b1c-a8e8-1a7c03056505\" width=\"150\"/\u003e |\n| \u003ch2\u003eProject 3: ViewsAndModifiers (Day 23-24)\u003c/h2\u003eToday is our first technique project, and we’re focusing on two fundamental components of SwiftUI: views and modifiers. We’ve been using these already, but we’ve kind of glossed over exactly how they work. Well, that ends today: we’ll be going through lots of details about what they are, how they work, and why they work as they do.\u003cbr\u003e\u003cbr\u003e**Steps and learnings:**\u003cul\u003e\u003cli\u003eWhy does SwiftUI use structs for views?\u003c/li\u003e\u003cli\u003eWhat is behind the main SwiftUI view?\u003c/li\u003e\u003cli\u003eWhy modifier order matters\u003c/li\u003e\u003cli\u003eWhy does SwiftUI use “some View” for its view type?\u003c/li\u003e\u003cli\u003eConditional modifiers\u003c/li\u003e\u003cli\u003eEnvironment modifiers\u003c/li\u003e\u003cli\u003eViews as properties\u003c/li\u003e\u003cli\u003eView composition\u003c/li\u003e\u003cli\u003eCustom modifiers\u003c/li\u003e\u003cli\u003eCustom containers\u003c/li\u003e\u003c/ul\u003e | *Nothing noteworthy to show today* |\n| \u003ch2\u003eMilestone 1 \u0026 Challenge (Day 25)\u003c/h2\u003eToday we'll review what you've learned so far, focusing on these three key points that I'll provide some better insight for:\u003cbr\u003e\u003cul\u003e\u003cli\u003eStructs vs classes\u003c/li\u003e\u003cli\u003eWorking with ForEach\u003c/li\u003e\u003cli\u003eWorking with bindings\u003c/li\u003e\u003c/ul\u003eThere's also a challenge for you to put that knowledge into practice. It's going to be a Rock, Paper, Scissors Guessing Game, that should work like this:\u003cul\u003e\u003cli\u003eEach turn of the game the app will randomly pick either rock, paper, or scissors.\u003c/li\u003e\u003cli\u003eEach turn the app will alternate between prompting the player to win or lose.\u003c/li\u003e\u003cli\u003eThe player must then tap the correct move to win or lose the game.\u003c/li\u003e\u003cli\u003eIf they are correct they score a point; otherwise they lose a point.\u003c/li\u003e\u003cli\u003eThe game ends after 10 questions, at which point their score is shown.\u003c/li\u003e\u003c/ul\u003e | \u003cimg src=\"https://github.com/aaron-22766/Hacking-With-Swift/assets/79376206/3c0ceb5c-b985-449c-97ae-04834fefc33e\" width=\"150\"/\u003e | \n| \u003ch2\u003eProject 4: BetterRest (Day 29-31)\u003c/h2\u003eThis SwiftUI project is another forms-based app that will ask the user to enter information and convert that all into an alert. I'm going to introduce you to one of the true power features of iOS development: machine learning (ML) using Apple's CoreML.\u003cbr\u003e\u003cbr\u003e**Steps and learnings:**\u003cul\u003e\u003cli\u003eEntering numbers with Stepper\u003c/li\u003e\u003cli\u003eSelecting dates and times with DatePicker\u003c/li\u003e\u003cli\u003eWorking with dates\u003c/li\u003e\u003cli\u003eTraining a model with Create ML\u003c/li\u003e\u003cli\u003eConnecting SwiftUI to Core ML\u003c/li\u003e\u003c/ul\u003e**Additional work:**\u003cul\u003e\u003cli\u003eColoring individual segments of a form\u003c/li\u003e\u003cli\u003eDark and Light Theme\u003c/li\u003e\u003c/ul\u003e | \u003cimg src=\"https://github.com/aaron-22766/Hacking-With-Swift/assets/79376206/adaffe50-b629-4fba-8a22-d7ef5067df91\" width=\"150\"/\u003e |\n| \u003ch2\u003eProject 5: WordScramble (Day 26-28)\u003c/h2\u003eThis project will be another game that will show players a random eight-letter word, and ask them to make words out of it. For example, if the starter word is “alarming” they might spell “alarm”, “ring”, “main”, and so on.\u003cbr\u003e\u003cbr\u003e**Steps and learnings:**\u003cul\u003e\u003cli\u003eIntroducing List, your best friend\u003c/li\u003e\u003cli\u003eLoading resources from your app bundle\u003c/li\u003e\u003cli\u003eWorking with strings\u003c/li\u003e\u003cli\u003eAdding to a list of words\u003c/li\u003e\u003cli\u003eRunning code when our app launches\u003c/li\u003e\u003cli\u003eValidating words with UITextChecker\u003c/li\u003e\u003c/ul\u003e**Additional work:**\u003cul\u003e\u003cli\u003e✨Design✨\u003c/li\u003e\u003cli\u003eScroll View direction\u003c/li\u003e\u003cli\u003eTextField enhancements\u003c/li\u003e\u003cli\u003eChange word button\u003c/li\u003e\u003cli\u003eHighscore system\u003c/li\u003e\u003cli\u003eError in view rather that Alert\u003c/li\u003e\u003c/ul\u003e | \u003cimg src=\"https://github.com/user-attachments/assets/556463c7-f888-48fe-925e-9a4d79b1a19e\" width=\"150\"/\u003e |\n\n\n*this list will be expanded as I'm currently working on the projects...*\n\n\u003c!--\n| \u003ch2\u003eProject :  (Day -)\u003c/h2\u003eDESCRIPTION\u003cbr\u003e\u003cbr\u003e**Steps and Learnings:**BULLETS**Additional Work:**BULLETS | \u003cimg src=\"\" width=\"150\"/\u003e |\n--\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaron-22766%2Fhacking-with-swift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faaron-22766%2Fhacking-with-swift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaron-22766%2Fhacking-with-swift/lists"}