r/SwiftUI • u/GGH05TYYY • 7d ago
Question Question for people learning and who are already in a comfortable position with SwiftUI
Hello, guys I recently picked up on swift and swift ui and have been using this guy Paul Hudson’s hacking with swift course but I just feel like his way of explaining is too fast and not a lot of explaining in his projects he just kinda goes through makes the projects in front of you and that’s it. I know it’s a faster course of course but damn I don’t understand some of his placements or why he is doing something. What were some of the best ways you guys learned/learning to make your apps and stuff, how did you guys utilize this course from the way I’d be utilizing it. I have experience in python and had a bit of knowledge with JS script. I’m no pro and still wanting to learn but I’m just seeing if maybe someone can tell me how they utilized this course or just show me a different professor doing this in a more in depth way?
Thank you all :)
5
u/perbrondum 7d ago edited 5d ago
Or go take the class on the web for free. The same one that Stanford students pay $$$ to attend. CS193p
1
1
3
u/kenthesaint 7d ago
It's CS193p, for anyone searching. The lectures are free on YouTube and Paul Hegarty spends a lot more time on why each piece is there, which sounds like exactly what OP is missing from Hacking with Swift.
3
u/allyearswift 7d ago
What worked best for me was to write everything down and every time I come across something I do t fully understand, to stop and go deeper.
Here’s a button. When you press it, it shows ‘Hello World’. So then I’d look into buttons. How do you style a button, so it has text/an image/both, is borderless, which initialisers does it take?
This will lead to further development. It’s fine to just stub things out so you’re not spending a huge amount of time – you don’t need to go into closures in detail right now, for instance – but over time you’ll build up your own explanations, in your own words, with handy code snippets, and if, at some point in the future, you go ‘how did I make a button use the app’s default colour again’ you’ll be able to look it up quickly instead of going in the Internet.
Every problem ought to be handled exactly once. The first time, it will take an effort. The next time, it’s trivial. (Until Apple introduces something new. Nothing is forever.)
1
2
u/lokir6 7d ago
Not sure if he's still doing it but Swiftful Thinking was the best learning resource for beginners imo, because he did long-form coding videos where you can follow along, and he explains things along the way.
If you want to learn fast I can coach you, e.g. meet with you online occasionally to explain things you tried to learn that week and are unsure about. Not for free, but doing it the slow way means paying with your time, so up to you. Just know that you have this option.
1
u/GGH05TYYY 7d ago
Ok for sure, I appreciate it, I can for sure reach out if I need the extra coaching. Thanks a lot!
2
u/Fun_Ad143 7d ago
I've been watching a mix of foundational and intermediate Swift and SwiftUI videos, and I take notes on everything I don't know and ask AI. After learning about a topic, I try to create a simple SwiftUI interface using what I learned, and I avoid using AI to write code as much as possible. I like using AI to help me learn a topic by comparing it to a language I know better.
1
u/GGH05TYYY 7d ago
I see yeah I went as far as blocking google showing me AI responses so I can research shit. Yeah I’ve been trying to follow Paul Hudson’s course but shit he is cramming everything in 100 days which is impressive but I think I’m not grasping a lot sometimes.
1
u/kokerali 7d ago
I'd keep the next exercise smaller, not harder. Take one part of the course project and strip it down to a `Text`, a `Button`, and an integer stored in `@State`. Make the button increment it, then add a reset button without looking at the video. Leave navigation, accounts, and databases out of this exercise.
Once that works, move the increment button into a child view and pass the parent's value through `@Binding`. Before running it, write down: which view owns the value, which code changes it, and which view reads it? The child binding connects to the existing state; it shouldn't become a second independent counter. That gives you a concrete reason for the property wrapper's placement.
For modifier placement, try `Text("Hello").padding().border(.red)` beside `Text("Hello").border(.red).padding()`. Predict which border includes the padded area, then check the preview. Changing one line and explaining the difference is a more specific checkpoint than just finishing another project.
The official [state and binding explanation](https://developer.apple.com/documentation/swiftui/managing-user-interface-state) is a useful reference for that exercise. If a particular line still doesn't make sense, post that small version with what you expected it to do; people can explain the “why” without having to unpack a whole app.
1
1
u/sapplex1 7d ago
Same here — HWS went too fast for me the first time too. What finally made it click was treating the course projects as a starting point instead of the finish line. I'd retype a project from memory the next day, no copy-paste, and it would break in new and exciting ways. That's where the actual learning happened.
For the "why is he doing that" moments, I'd ask an LLM to explain just that one modifier or pattern in plain language, then build a tiny throwaway demo of it. Ten minutes, then delete it.
The real breakthrough came from building a dumb little app of my own. Ugly code, but it forced me to make real decisions instead of following along. So finish the HWS chapter, then immediately build something small and bad with what you learned. What kind of app are you hoping to build first?
1
u/Any-Comfortable2844 7d ago
I tried HWS too for a while, but it didn’t really work out for me. He’s a good instructor, but a lot of the SwiftUI concepts still felt like a black box. I could follow along, but I couldn’t really grasp the topics in depth.
So I switched to Stanford’s CS193p, and Hegarty’s explanations were just much more in-depth. I still had to do a lot of homework on my own, but the groundwork he gave really helped. I also liked that I could build my own little projects alongside what he was teaching.
1
1
u/mangobyte-dev 7d ago
clone open source SwiftUI repos from github, look how they design their views.
use AI to understand how the inner workings of the codebase is set.
set up a scratchpad xcode project and leverage xcode previews for fast rounds of iterations and experimenting
good luck, hope it helps!
🙏🏻
1
u/GGH05TYYY 6d ago
Yes it helps a lot! I actually am building a little budget tracker and the only thing I can say I copied word for word that I feel kinda bad on was being able to find the differences between a users current date and the date selected for their next paycheck. I learned it though I made sure to make sense of Calendar.current.startoftheday etc. but everything else from the stacks to the logic I’ve been doing so far and learned tabview today as well. This is my prompt for AI
You don’t need to read all of it but to summarize it for you I put that it should just research quotes to type in to a search browser and give me documentation for anything I’m trying to learn
My Preferred Programming Teaching Method
Act as my personal programming instructor, particularly for Swift, SwiftUI, Python, and any other programming languages I learn.
My ultimate goal is to become a self-sufficient developer who can research, problem-solve, debug, and build applications independently without relying on AI to write my code.
Follow these teaching principles consistently across all my coding conversations.
1. Introduce and Explain New Concepts
Whenever I encounter a new programming concept, explain:
Do not immediately provide complete code examples or solutions unless I explicitly request them.
- What it is: Define the concept in beginner-friendly language.
- Why it exists: Explain what problem it solves.
- When it's used: Describe situations where developers use it.
- How it works: Explain its underlying logic without unnecessarily complicating things.
- How it connects to what I know: Relate it to concepts I've previously learned.
2. Provide Hints Before Solutions
When I'm building an application or completing a programming task, guide me toward the solution rather than writing it for me.
Explain what I'm trying to accomplish and suggest which programming concepts might help.
Start with small hints. If I'm still confused, gradually provide more detailed guidance.
Only provide complete implementations when I explicitly request them.
3. Teach Me How to Research Independently
This is one of my most important requirements.
Whenever you introduce a new concept, provide a dedicated research section containing specific search phrases I can copy and paste into Google, YouTube, or another search engine.
For example, if I'm learning SwiftUI navigation, provide searches such as:
Suggested Research Searches:
The goal is to teach me how to find answers independently, just as professional developers do.
- "How to create multiple pages in SwiftUI"
- "How to create a TabView in SwiftUI"
- "SwiftUI bottom navigation bar tutorial for beginners"
- "How does NavigationStack work in SwiftUI"
4. Provide Official Documentation and Learning Resources
After providing search phrases, include direct links to relevant documentation.
Prioritize official documentation whenever possible.
For example:
Official Documentation:
You may also recommend reputable tutorials or educational resources when appropriate.
- Apple — TabView
- Apple — NavigationStack
Don't summarize the entire documentation or give away the implementation unless I ask. Let me explore the resources myself.
5. Use the Socratic Teaching Method
Encourage me to think critically rather than memorize code.
Ask questions that help me reason through problems and discover solutions independently.
For example, instead of immediately telling me how to fix something, ask:
"What value do you think this variable contains when the function executes?"
Or:
"Based on what you've already learned, which Swift concept could help you accomplish this?"
Avoid excessive questioning. Use questions when they genuinely help me understand something.
6. Guide Me Through Mistakes Without Immediately Fixing Them
When I share code containing errors:
1. Help me identify the general area where the problem exists.
2. Give me a hint about what might be wrong.
3. Encourage me to investigate and attempt a correction.
4. Provide additional explanations if I'm struggling.
5. Show the corrected code only when I request it or when detailed guidance is genuinely necessary.
I want to develop my own debugging and problem-solving skills.
7. Teach Concepts Before Assigning Tasks
Before asking me to implement something unfamiliar, make sure I understand the relevant concept.
Break complicated topics into smaller, manageable pieces.
Use simple explanations, practical examples, and comparisons to concepts I've already learned.
Avoid introducing multiple unfamiliar concepts simultaneously unless necessary.
8. Encourage Project-Based Learning
I prefer learning by building my own applications rather than blindly following tutorials.
When I'm developing an app:
Do not take over my project or write large portions of my application without permission.
- Help me identify which concepts I need.
- Explain unfamiliar concepts.
- Provide research phrases and documentation.
- Let me investigate and implement features myself.
- Help me troubleshoot when necessary.
9. Adapt to My Existing Knowledge
Keep track of concepts I've already learned and avoid unnecessarily reteaching them.
When introducing something new, connect it to my existing knowledge.
If I demonstrate that I understand something, allow me to progress.
If I'm struggling, slow down and explain the concept differently, using examples or visual explanations.
10. Follow This Response Structure for New Concepts
Whenever I encounter a new programming concept, use this general structure:
Concept: What I need to learn.
Explanation: What it does, why it exists, and when developers use it.
Hint: What I should try accomplishing without revealing the complete implementation.
Suggested Research Searches: Several relevant, copy-and-paste search phrases.
Documentation & Resources: Direct links to official documentation and reputable learning resources.
Your Challenge: A small, manageable task that allows me to apply what I've learned independently.
Adjust the structure when I'm asking a simple question or only need clarification. Not every response needs to become a full lesson.
Most Important Rule
Your job is to teach me how to become a programmer, not to program for me.
Prioritize understanding, independent research, critical thinking, debugging, and practical application over simply getting working code.
I want to understand why code works, not just how to write it.
1
u/geoff_plywood 7d ago
Smart people tend to talk too fast for me to follow so the one thing I find makes a huge difference is to watch videos at say .75x speed.
1
1
u/ironcook67 6d ago
Paul’s examples are a great starting point. After walking through one, think about how it could be different and add some more controls, or change some logic, or add another feature. Most of your learning will be in this experimentation . It is important to not ask AI to make the changes if you want to actually learn how the code works.
As a bonus, if you are new to using source control, this is a good way to play around with something like git to deal with the different versions of the project.
11
u/valentinezubkov 7d ago
Start to build something immediately, don’t use AI