diff --git a/DailyQuest/DailyQuest.xcodeproj/project.pbxproj b/DailyQuest/DailyQuest.xcodeproj/project.pbxproj index 7ceeb9c..8e00d04 100644 --- a/DailyQuest/DailyQuest.xcodeproj/project.pbxproj +++ b/DailyQuest/DailyQuest.xcodeproj/project.pbxproj @@ -22,6 +22,17 @@ 3499552729235D1E007AB99E /* BrowseItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3499552629235D1E007AB99E /* BrowseItemViewModel.swift */; }; 349955292923600A007AB99E /* BrowseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349955282923600A007AB99E /* BrowseViewController.swift */; }; 3499552B29236041007AB99E /* BrowseViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3499552A29236041007AB99E /* BrowseViewModel.swift */; }; + 34A529D129247880001BAD34 /* Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529D029247880001BAD34 /* Coordinator.swift */; }; + 34A529D329247903001BAD34 /* TabCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529D229247903001BAD34 /* TabCoordinator.swift */; }; + 34A529D529247932001BAD34 /* AppCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529D429247932001BAD34 /* AppCoordinator.swift */; }; + 34A529D829247A87001BAD34 /* HomeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529D729247A87001BAD34 /* HomeCoordinator.swift */; }; + 34A529DA29247B9C001BAD34 /* AppDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529D929247B9C001BAD34 /* AppDIContainer.swift */; }; + 34A529DC29247BB6001BAD34 /* HomeSceneDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529DB29247BB6001BAD34 /* HomeSceneDIContainer.swift */; }; + 34A529E029247F1F001BAD34 /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529DF29247F1F001BAD34 /* HomeViewController.swift */; }; + 34A529E22924816A001BAD34 /* BrowseSceneDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529E12924816A001BAD34 /* BrowseSceneDIContainer.swift */; }; + 34A529E429248178001BAD34 /* SettingsSceneDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529E329248178001BAD34 /* SettingsSceneDIContainer.swift */; }; + 34A529E7292481E1001BAD34 /* BrowseCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529E6292481E1001BAD34 /* BrowseCoordinator.swift */; }; + 34A529E929248B58001BAD34 /* AppAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A529E829248B58001BAD34 /* AppAppearance.swift */; }; 34ACC32D291DE9C000741371 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACC32C291DE9C000741371 /* AppDelegate.swift */; }; 34ACC32F291DE9C000741371 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACC32E291DE9C000741371 /* SceneDelegate.swift */; }; 34ACC336291DE9C100741371 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 34ACC335291DE9C100741371 /* Assets.xcassets */; }; @@ -67,6 +78,17 @@ 3499552629235D1E007AB99E /* BrowseItemViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowseItemViewModel.swift; sourceTree = ""; }; 349955282923600A007AB99E /* BrowseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowseViewController.swift; sourceTree = ""; }; 3499552A29236041007AB99E /* BrowseViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowseViewModel.swift; sourceTree = ""; }; + 34A529D029247880001BAD34 /* Coordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Coordinator.swift; sourceTree = ""; }; + 34A529D229247903001BAD34 /* TabCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabCoordinator.swift; sourceTree = ""; }; + 34A529D429247932001BAD34 /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = ""; }; + 34A529D729247A87001BAD34 /* HomeCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCoordinator.swift; sourceTree = ""; }; + 34A529D929247B9C001BAD34 /* AppDIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDIContainer.swift; sourceTree = ""; }; + 34A529DB29247BB6001BAD34 /* HomeSceneDIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSceneDIContainer.swift; sourceTree = ""; }; + 34A529DF29247F1F001BAD34 /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; + 34A529E12924816A001BAD34 /* BrowseSceneDIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowseSceneDIContainer.swift; sourceTree = ""; }; + 34A529E329248178001BAD34 /* SettingsSceneDIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSceneDIContainer.swift; sourceTree = ""; }; + 34A529E6292481E1001BAD34 /* BrowseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowseCoordinator.swift; sourceTree = ""; }; + 34A529E829248B58001BAD34 /* AppAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAppearance.swift; sourceTree = ""; }; 34ACC329291DE9C000741371 /* DailyQuest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DailyQuest.app; sourceTree = BUILT_PRODUCTS_DIR; }; 34ACC32C291DE9C000741371 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 34ACC32E291DE9C000741371 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -147,6 +169,10 @@ 3499551329232525007AB99E /* DIContainer */ = { isa = PBXGroup; children = ( + 34A529D929247B9C001BAD34 /* AppDIContainer.swift */, + 34A529DB29247BB6001BAD34 /* HomeSceneDIContainer.swift */, + 34A529E12924816A001BAD34 /* BrowseSceneDIContainer.swift */, + 34A529E329248178001BAD34 /* SettingsSceneDIContainer.swift */, ); path = DIContainer; sourceTree = ""; @@ -176,6 +202,9 @@ 34995519292332A9007AB99E /* Home */ = { isa = PBXGroup; children = ( + 34A529DE29247F13001BAD34 /* ViewModel */, + 34A529DD29247F0C001BAD34 /* ViewController */, + 34A529D629247A52001BAD34 /* Flow */, ); path = Home; sourceTree = ""; @@ -183,8 +212,9 @@ 3499551A292332B2007AB99E /* Browse */ = { isa = PBXGroup; children = ( - 3499552429235034007AB99E /* View */, + 3499552429235034007AB99E /* ViewController */, 349955252923503C007AB99E /* ViewModel */, + 34A529E5292481C9001BAD34 /* Flow */, ); path = Browse; sourceTree = ""; @@ -207,12 +237,12 @@ path = Cells; sourceTree = ""; }; - 3499552429235034007AB99E /* View */ = { + 3499552429235034007AB99E /* ViewController */ = { isa = PBXGroup; children = ( 349955282923600A007AB99E /* BrowseViewController.swift */, ); - path = View; + path = ViewController; sourceTree = ""; }; 349955252923503C007AB99E /* ViewModel */ = { @@ -224,6 +254,46 @@ path = ViewModel; sourceTree = ""; }; + 34A529CF29247875001BAD34 /* Protocols */ = { + isa = PBXGroup; + children = ( + 34A529D029247880001BAD34 /* Coordinator.swift */, + 34A529D229247903001BAD34 /* TabCoordinator.swift */, + ); + path = Protocols; + sourceTree = ""; + }; + 34A529D629247A52001BAD34 /* Flow */ = { + isa = PBXGroup; + children = ( + 34A529D729247A87001BAD34 /* HomeCoordinator.swift */, + ); + path = Flow; + sourceTree = ""; + }; + 34A529DD29247F0C001BAD34 /* ViewController */ = { + isa = PBXGroup; + children = ( + 34A529DF29247F1F001BAD34 /* HomeViewController.swift */, + ); + path = ViewController; + sourceTree = ""; + }; + 34A529DE29247F13001BAD34 /* ViewModel */ = { + isa = PBXGroup; + children = ( + ); + path = ViewModel; + sourceTree = ""; + }; + 34A529E5292481C9001BAD34 /* Flow */ = { + isa = PBXGroup; + children = ( + 34A529E6292481E1001BAD34 /* BrowseCoordinator.swift */, + ); + path = Flow; + sourceTree = ""; + }; 34ACC320291DE9C000741371 = { isa = PBXGroup; children = ( @@ -280,9 +350,12 @@ 34ACC367291DF00B00741371 /* Application */ = { isa = PBXGroup; children = ( + 34A529CF29247875001BAD34 /* Protocols */, 3499551329232525007AB99E /* DIContainer */, 34ACC32C291DE9C000741371 /* AppDelegate.swift */, 34ACC32E291DE9C000741371 /* SceneDelegate.swift */, + 34A529D429247932001BAD34 /* AppCoordinator.swift */, + 34A529E829248B58001BAD34 /* AppAppearance.swift */, ); path = Application; sourceTree = ""; @@ -462,21 +535,32 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 34A529D129247880001BAD34 /* Coordinator.swift in Sources */, 3499552029234637007AB99E /* CustomProgressBar.swift in Sources */, + 34A529E22924816A001BAD34 /* BrowseSceneDIContainer.swift in Sources */, + 34A529E929248B58001BAD34 /* AppAppearance.swift in Sources */, 3499552329234D5F007AB99E /* BrowseCell.swift in Sources */, 3499551E29233DEF007AB99E /* QuestCell.swift in Sources */, + 34A529DC29247BB6001BAD34 /* HomeSceneDIContainer.swift in Sources */, + 34A529E7292481E1001BAD34 /* BrowseCoordinator.swift in Sources */, + 34A529D329247903001BAD34 /* TabCoordinator.swift in Sources */, 3449AD5D2922197000B87619 /* User.swift in Sources */, + 34A529E429248178001BAD34 /* SettingsSceneDIContainer.swift in Sources */, + 34A529E029247F1F001BAD34 /* HomeViewController.swift in Sources */, + 34A529D529247932001BAD34 /* AppCoordinator.swift in Sources */, B50078D629222F3F0070AFC4 /* CircleCheckView.swift in Sources */, 3499552729235D1E007AB99E /* BrowseItemViewModel.swift in Sources */, 349955292923600A007AB99E /* BrowseViewController.swift in Sources */, B58DFC0A29227DA800C68A4B /* CalendarCell.swift in Sources */, 3499551529232533007AB99E /* UIColor+.swift in Sources */, + 34A529DA29247B9C001BAD34 /* AppDIContainer.swift in Sources */, 34ACC32D291DE9C000741371 /* AppDelegate.swift in Sources */, 3499552B29236041007AB99E /* BrowseViewModel.swift in Sources */, 3449AD5B2922164B00B87619 /* Quest.swift in Sources */, 349955122923220E007AB99E /* SwiftUIPreview.swift in Sources */, 3449AD6029222B3900B87619 /* UserInfoCell.swift in Sources */, 34ACC32F291DE9C000741371 /* SceneDelegate.swift in Sources */, + 34A529D829247A87001BAD34 /* HomeCoordinator.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/DailyQuest/DailyQuest/Application/AppAppearance.swift b/DailyQuest/DailyQuest/Application/AppAppearance.swift new file mode 100644 index 0000000..64e8249 --- /dev/null +++ b/DailyQuest/DailyQuest/Application/AppAppearance.swift @@ -0,0 +1,15 @@ +// +// AppAppearance.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import UIKit + +final class AppAppearance { + static func setupAppearance() { + UITabBar.appearance().backgroundColor = .white + UITabBar.appearance().tintColor = .maxYellow + } +} diff --git a/DailyQuest/DailyQuest/Application/AppCoordinator.swift b/DailyQuest/DailyQuest/Application/AppCoordinator.swift new file mode 100644 index 0000000..9c3924a --- /dev/null +++ b/DailyQuest/DailyQuest/Application/AppCoordinator.swift @@ -0,0 +1,71 @@ +// +// AppCoordinator.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import UIKit + +final class AppCoordinator: NSObject, TabCoordinator, UITabBarControllerDelegate { + weak var finishDelegate: CoordinatorFinishDelegate? + var tabBarController: UITabBarController + var childCoordinators: [Coordinator] = [] + let appDIContainer: AppDIContainer + + init(tabBarController: UITabBarController, + appDIContainer: AppDIContainer) { + self.tabBarController = tabBarController + self.appDIContainer = appDIContainer + } + + func start() { + let pages: [TabBarPage] = [.home, .browse, .settings] + let controllers: [UINavigationController] = pages.map(getTabController(_:)) + + prepareTabBarController(withTabControllers: controllers) + } + + private func prepareTabBarController(withTabControllers tabControllers: [UIViewController]) { + tabBarController.delegate = self + tabBarController.setViewControllers(tabControllers, animated: true) + tabBarController.selectedIndex = TabBarPage.home.pageOrderNumber() + tabBarController.tabBar.isTranslucent = false + + } + + private func getTabController(_ page: TabBarPage) -> UINavigationController { + let navController = UINavigationController() + navController.setNavigationBarHidden(false, animated: false) + + navController.tabBarItem = UITabBarItem.init(title: page.pageTitleValue(), + image: page.pageIcon(), + tag: page.pageOrderNumber()) + + switch page { + case .home: + let homeSceneDIContainer = appDIContainer.makeHomeSceneDIContainer() + let homeCoordinator = homeSceneDIContainer.makeHomeCoordinator(navigationController: navController, + homeSceneDIContainer: homeSceneDIContainer) + homeCoordinator.start() + childCoordinators.append(homeCoordinator) + break + case .browse: + let browseSceneDIContainer = appDIContainer.makeBrowseSceneDIContainer() + let browseCoordinator = browseSceneDIContainer.makeBrowseCoordinator(navigationController: navController, + browseSceneDIContainer: browseSceneDIContainer) + browseCoordinator.start() + childCoordinators.append(browseCoordinator) + case .settings: + break + } + + return navController + } +} + +extension AppCoordinator: CoordinatorFinishDelegate { + func coordinatorDidFinish(childCoordinator: Coordinator) { + + } +} diff --git a/DailyQuest/DailyQuest/Application/DIContainer/AppDIContainer.swift b/DailyQuest/DailyQuest/Application/DIContainer/AppDIContainer.swift new file mode 100644 index 0000000..697f0f4 --- /dev/null +++ b/DailyQuest/DailyQuest/Application/DIContainer/AppDIContainer.swift @@ -0,0 +1,20 @@ +// +// AppDIContainer.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import Foundation + +final class AppDIContainer { + + func makeHomeSceneDIContainer() -> HomeSceneDIContainer { + return HomeSceneDIContainer() + } + + func makeBrowseSceneDIContainer() -> BrowseSceneDIContainer { + return BrowseSceneDIContainer() + } + // func makeSettingsSceneDIContainer() -> SettingsDIContainer +} diff --git a/DailyQuest/DailyQuest/Application/DIContainer/BrowseSceneDIContainer.swift b/DailyQuest/DailyQuest/Application/DIContainer/BrowseSceneDIContainer.swift new file mode 100644 index 0000000..f20eb16 --- /dev/null +++ b/DailyQuest/DailyQuest/Application/DIContainer/BrowseSceneDIContainer.swift @@ -0,0 +1,33 @@ +// +// BrowseSceneDIContainer.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import UIKit + +final class BrowseSceneDIContainer { + + // MARK: - Repositories + + // MARK: - Use Cases + + // MARK: - View Models + func makeBrowseViewModel() -> BrowseViewModel { + return BrowseViewModel() + } + + // MARK: - View Controller + func makeBrowseViewController() -> BrowseViewController { + return BrowseViewController.create(with: makeBrowseViewModel()) + } + + // MARK: - Flow + func makeBrowseCoordinator(navigationController: UINavigationController, + browseSceneDIContainer: BrowseSceneDIContainer) -> BrowseCoordinator { + return DefaultBrowseCoordinator(navigationController: navigationController, + browseSceneDIContainer: browseSceneDIContainer) + } +} + diff --git a/DailyQuest/DailyQuest/Application/DIContainer/HomeSceneDIContainer.swift b/DailyQuest/DailyQuest/Application/DIContainer/HomeSceneDIContainer.swift new file mode 100644 index 0000000..4c21450 --- /dev/null +++ b/DailyQuest/DailyQuest/Application/DIContainer/HomeSceneDIContainer.swift @@ -0,0 +1,29 @@ +// +// HomeSceneDIContainer.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import UIKit + +final class HomeSceneDIContainer { + + // MARK: - Repositories + + // MARK: - Use Cases + + // MARK: - View Models + + // MARK: - View Controller + func makeHomeViewController() -> HomeViewController { + return HomeViewController.create() + } + + // MARK: - Flow + func makeHomeCoordinator(navigationController: UINavigationController, + homeSceneDIContainer: HomeSceneDIContainer) -> HomeCoordinator { + return DefaultHomeCoordinator(navigationController: navigationController, + homeSceneDIContainer: homeSceneDIContainer) + } +} diff --git a/DailyQuest/DailyQuest/Application/DIContainer/SettingsSceneDIContainer.swift b/DailyQuest/DailyQuest/Application/DIContainer/SettingsSceneDIContainer.swift new file mode 100644 index 0000000..5964e74 --- /dev/null +++ b/DailyQuest/DailyQuest/Application/DIContainer/SettingsSceneDIContainer.swift @@ -0,0 +1,8 @@ +// +// SettingsSceneDIContainer.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import Foundation diff --git a/DailyQuest/DailyQuest/Application/Protocols/Coordinator.swift b/DailyQuest/DailyQuest/Application/Protocols/Coordinator.swift new file mode 100644 index 0000000..aa6bac9 --- /dev/null +++ b/DailyQuest/DailyQuest/Application/Protocols/Coordinator.swift @@ -0,0 +1,27 @@ +// +// Coordinator.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import UIKit + +protocol Coordinator: AnyObject { + var finishDelegate: CoordinatorFinishDelegate? { get set } + var childCoordinators: [Coordinator] { get set } + + func start() + func finish() +} + +extension Coordinator { + func finish() { + childCoordinators.removeAll() + finishDelegate?.coordinatorDidFinish(childCoordinator: self) + } +} + +protocol CoordinatorFinishDelegate: AnyObject { + func coordinatorDidFinish(childCoordinator: Coordinator) +} diff --git a/DailyQuest/DailyQuest/Application/Protocols/TabCoordinator.swift b/DailyQuest/DailyQuest/Application/Protocols/TabCoordinator.swift new file mode 100644 index 0000000..c55ff56 --- /dev/null +++ b/DailyQuest/DailyQuest/Application/Protocols/TabCoordinator.swift @@ -0,0 +1,65 @@ +// +// TabCoordinator.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import UIKit + +protocol TabCoordinator: Coordinator { + var tabBarController: UITabBarController { get set } +} + +enum TabBarPage { + case home + case browse + case settings + + init?(index: Int) { + switch index { + case 0: + self = .home + case 1: + self = .browse + case 2: + self = .settings + default: + return nil + } + } + + func pageTitleValue() -> String { + switch self { + case .home: + return "홈" + case .browse: + return "둘러보기" + case .settings: + return "더보기" + } + } + + func pageOrderNumber() -> Int { + switch self { + case .home: + return 0 + case .browse: + return 1 + case .settings: + return 2 + } + } + + func pageIcon() -> UIImage? { + switch self { + case .home: + return UIImage(systemName: "house") + case .browse: + return UIImage(systemName: "leaf.fill") + case .settings: + return UIImage(systemName: "ellipsis") + } + } +} + diff --git a/DailyQuest/DailyQuest/Application/SceneDelegate.swift b/DailyQuest/DailyQuest/Application/SceneDelegate.swift index 15caf7e..0959c77 100644 --- a/DailyQuest/DailyQuest/Application/SceneDelegate.swift +++ b/DailyQuest/DailyQuest/Application/SceneDelegate.swift @@ -10,18 +10,26 @@ import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? - + var appCoordinator: AppCoordinator? + let appDIContainer = AppDIContainer() func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). guard let windowScene = (scene as? UIWindowScene) else { return } - let cont = BrowseViewController.create(with: BrowseViewModel()) + AppAppearance.setupAppearance() + + let tabbarController = UITabBarController() + self.window = UIWindow(windowScene: windowScene) - self.window?.rootViewController = cont + self.window?.rootViewController = tabbarController self.window?.makeKeyAndVisible() + self.appCoordinator = AppCoordinator(tabBarController: tabbarController, + appDIContainer: appDIContainer) + self.appCoordinator?.start() + return } diff --git a/DailyQuest/DailyQuest/Presentation/Browse/Flow/BrowseCoordinator.swift b/DailyQuest/DailyQuest/Presentation/Browse/Flow/BrowseCoordinator.swift new file mode 100644 index 0000000..8df4d9b --- /dev/null +++ b/DailyQuest/DailyQuest/Presentation/Browse/Flow/BrowseCoordinator.swift @@ -0,0 +1,35 @@ +// +// BrowseCoordinator.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import UIKit + +protocol BrowseCoordinator: Coordinator { + func showDetailFlow() +} + +final class DefaultBrowseCoordinator: BrowseCoordinator { + var finishDelegate: CoordinatorFinishDelegate? + var childCoordinators: [Coordinator] = [] + var navigationController: UINavigationController + let browseSceneDIContainer: BrowseSceneDIContainer + + init(navigationController: UINavigationController, + browseSceneDIContainer: BrowseSceneDIContainer) { + self.navigationController = navigationController + self.browseSceneDIContainer = browseSceneDIContainer + } + + func start() { + let browseViewController = browseSceneDIContainer.makeBrowseViewController() + navigationController.pushViewController(browseViewController, animated: false) + } + + func showDetailFlow() { + + } +} + diff --git a/DailyQuest/DailyQuest/Presentation/Browse/View/BrowseViewController.swift b/DailyQuest/DailyQuest/Presentation/Browse/ViewController/BrowseViewController.swift similarity index 100% rename from DailyQuest/DailyQuest/Presentation/Browse/View/BrowseViewController.swift rename to DailyQuest/DailyQuest/Presentation/Browse/ViewController/BrowseViewController.swift diff --git a/DailyQuest/DailyQuest/Presentation/Home/Flow/HomeCoordinator.swift b/DailyQuest/DailyQuest/Presentation/Home/Flow/HomeCoordinator.swift new file mode 100644 index 0000000..051d835 --- /dev/null +++ b/DailyQuest/DailyQuest/Presentation/Home/Flow/HomeCoordinator.swift @@ -0,0 +1,44 @@ +// +// HomeCoordinator.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import UIKit + +protocol HomeCoordinator: Coordinator { + func showProfileFlow() + func showAddQuestFlow() + func showAddFriendsFlow() +} + +final class DefaultHomeCoordinator: HomeCoordinator { + var finishDelegate: CoordinatorFinishDelegate? + var childCoordinators: [Coordinator] = [] + var navigationController: UINavigationController + let homeSceneDIContainer: HomeSceneDIContainer + + init(navigationController: UINavigationController, + homeSceneDIContainer: HomeSceneDIContainer) { + self.navigationController = navigationController + self.homeSceneDIContainer = homeSceneDIContainer + } + + func start() { + let homeViewController = homeSceneDIContainer.makeHomeViewController() + navigationController.pushViewController(homeViewController, animated: false) + } + + func showProfileFlow() { + + } + + func showAddQuestFlow() { + + } + + func showAddFriendsFlow() { + + } +} diff --git a/DailyQuest/DailyQuest/Presentation/Home/ViewController/HomeViewController.swift b/DailyQuest/DailyQuest/Presentation/Home/ViewController/HomeViewController.swift new file mode 100644 index 0000000..f302d2f --- /dev/null +++ b/DailyQuest/DailyQuest/Presentation/Home/ViewController/HomeViewController.swift @@ -0,0 +1,23 @@ +// +// HomeViewController.swift +// DailyQuest +// +// Created by jinwoong Kim on 2022/11/16. +// + +import UIKit + +final class HomeViewController: UIViewController { + + + // MARK: - Life Cycle + // static func create(with viewModel: HomeViewModel) + static func create() -> HomeViewController { + return HomeViewController() + } + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .blue + } +}