-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #17 from boostcampwm-2022/feature/Coordinators
Coordinator와 DI 구현
- Loading branch information
Showing
14 changed files
with
468 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) { | ||
|
||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
DailyQuest/DailyQuest/Application/DIContainer/AppDIContainer.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |
33 changes: 33 additions & 0 deletions
33
DailyQuest/DailyQuest/Application/DIContainer/BrowseSceneDIContainer.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
} | ||
} | ||
|
29 changes: 29 additions & 0 deletions
29
DailyQuest/DailyQuest/Application/DIContainer/HomeSceneDIContainer.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
DailyQuest/DailyQuest/Application/DIContainer/SettingsSceneDIContainer.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
// | ||
// SettingsSceneDIContainer.swift | ||
// DailyQuest | ||
// | ||
// Created by jinwoong Kim on 2022/11/16. | ||
// | ||
|
||
import Foundation |
27 changes: 27 additions & 0 deletions
27
DailyQuest/DailyQuest/Application/Protocols/Coordinator.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
} |
Oops, something went wrong.