I was not interested in UIKit development and I had started and stopped few times in past years with UIKit. But, SwiftUI is something that is bringing my interest back to iOS development.
But wait, you must be wondering that course is in UIKit and I really do not like UIKit. What I decided to do is to build the projects in SwiftUI and Combine. This path is really slow and I would suggest to folllow this path you are interested in learning both at a time. I had few knowledge of UIKit before I started this course so I am just figuring new stuff in UIKit.
you can find the code for the app here https://github.com/karm435/Udemy-iOS14-Samples/tree/master/Clima-iOS14
The course has a Weather app that looks like this.
LightMode
DarkMode
I have name the files with suffux 'Model', 'ViewModel', 'Service' and 'View' so that you can identify the parts of the MVVM pattern easily.
Most time cosuming part of the learning was understanding the Combine and how to structure the app using Combine framework. If you want to take a Deep Dive into Combine framework, I really encourage you to read through https://heckj.github.io/swiftui-notes/#introduction
Learnings while converting this project to SwiftUI
Supporting Light and Dark Mode
Starting with the background of the app. You will have to upload assets for each type of appearance in the assets folder.
Similar to background you can set the AccentColor of the app to be different for different environment and add additional color sets for primary or secondary colors.
Using Combine
If you are new to Functional Reactive Programming, I would suggest give a read https://blog.danlew.net/2017/07/27/an-introduction-to-functional-reactive-programming/.
Using Delegate Pattern in SwiftUI
I needed to get the current location of the User. So to do that I need to conform to CLLocationManagerDelegate protocol. You can check the implementation in the code in WeatherViewModel.