[ad_1]
I attempt to introduce VIP structure to my mission and don’t absolutely perceive the examples that I discover, I comply with this information https://www.netguru.com/weblog/clean-swift-ios-architecture-pattern, and study the supply code inside I’m confused in regards to the thought behind, that is the reusable thought of a creating this element or one of many approach methods to construct this element?
Instance:
// Scene Manufacturing facility
protocol SceneFactory {
var configurator: LoginSceneConfigurator! { get set }
func makeLoginScene() -> UIViewController
}
remaining class DefaultSceneFactory: SceneFactory {
var configurator: LoginSceneConfigurator!
func makeLoginScene() -> UIViewController {
let vc = LoginSceneViewController()
return configurator.configured(vc)
}
// Configurator
protocol LoginSceneConfigurator {
func configured(_ vc: LoginSceneViewController) -> LoginSceneViewController
}
remaining class DefaultLoginSceneConfigurator: LoginSceneConfigurator {
non-public var sceneFactory: SceneFactory
init(sceneFactory: SceneFactory) {
self.sceneFactory = sceneFactory
}
@discardableResult
func configured(_ vc: LoginSceneViewController) -> LoginSceneViewController {
sceneFactory.configurator = self
let service = DefaultAuthService(
networkManager: DefaultNetworkManager(session: MockNetworkSession())
)
let authWorker = LoginSceneAuthWorker(service: service)
let interactor = LoginSceneInteractor()
let presenter = LoginScenePresenter()
let router = LoginSceneRouter(sceneFactory: sceneFactory)
router.supply = vc
presenter.viewController = vc
interactor.presenter = presenter
interactor.authWorker = authWorker
vc.interactor = interactor
vc.router = router
return vc
}
}
In my case, I exploit a easy little development and do not know if that is the right approach or not, after I copy the thought and attempt to implement it in my mission, this doesn’t work. I’ve additionally hooked up the supply code of my mission on google https://drive.google.com/file/d/1DcTxDXNl8idp2C3HLs5ggixdRVTE1UGY/view?usp=sharing
My instance:
protocol HomeViewProtocol {
func reloadView(_ bucketLists: [TestData])
func showSearchResult(end result: String)
func progressState()
}
extension HomeViewController: HomeViewProtocol {
func progressState() {
views?.loader.startAnimating()
}
func showSearchResult(end result: String) {
router?.showSearchMsg(end result)
views?.loader.stopAnimating()
}
func reloadView(_ bucketLists: [TestData]) {
self.bucketLists = bucketLists
views?.label.textual content = bucketLists.final?.title
}
}
class HomeViewController: UIViewController {
non-public var bucketLists: [TestData] = []
var interactor: HomeInteractorProtocol?
var router: HomeViewControllerRouter?
var views: HomeViewContollerViews?
override func viewDidLoad() {
tremendous.viewDidLoad()
configurator()
views?.setupUI()
views?.setupConstraint()
views?.setupNavigationControllerElemenst()
}
non-public func configurator() {
let searchWorker: HomeViewControllerSearchWorkerProtocol = HomeViewControllerSearchWorker()
var presenter: HomePresenterProtocol = HomePresenter()
presenter.viewController = self
interactor = HomeInteractor()
interactor?.presenter = presenter
interactor?.searchWorker = searchWorker
router = HomeViewControllerRouter()
router?.supply = self
views = HomeViewContollerViews()
views?.supply = self
}
}
[ad_2]
