Project Architecture Pattern:
MVVM-Navigation architecture pattern used in this project to organize the source code in different modules. Standard MVVM with an extra module navigation that
will handle the navigation between the screens and dependency injection while creating the appropriate screens to navigate.
Bindings:
Native Combine framework has been used for the UI bindings between view controller -> view model and view model -> model.
UI:
UI is made programatically with the help of auto layouts and extensive use of stack views.
Unit Testing:
Unit testing is done to test the business logic in view models by XCTest framework. Mock functionality of navigation and service layer injected in view models
with help of dependency injection.
Motivation and helping material:
https://www.onswiftwings.com/posts/reusable-image-cache/
https://www.swiftbysundell.com/articles/building-dsls-in-swift/
https://github.com/sergdort/CleanArchitectureRxSwift