Я пытаюсь реорганизовать этот дублирующий рабочий код, относящийся к принципу СУХОЙ.(Swift Version 4) Вы можете скачать рабочий код Project здесь (он не большой).Проблема в том, что я не знаю, как правильно сделать это специально для этих функций, потому что они используют ViewController
классы, и я не смог справиться с ними, чтобы передать их и создать их экземпляр, чем в аутсорсинговой функции.Мне нужно было бы увидеть конкретную реализацию улучшенного кода в соответствии с сухим, потому что я потерпел неудачу в части реализации, я просто знаю, что сухой принцип будет чистым, но я не знаю, как это сделать в реальном коде
Что у меня есть:
import Foundation
import UIKit
public final class MainCoordinator {
var navigationController: UINavigationController
init(navigationController: UINavigationController) {
self.navigationController = navigationController
self.navigationController.setNavigationBarHidden(true, animated: false)
}
func showHome() {
var vc: HomeViewController
var i = 0
for viewController in navigationController.viewControllers {
if (viewController.isKind(of: HomeViewController.self)) {
vc = viewController as! HomeViewController
navigationController.viewControllers.remove(at: i)
navigationController.pushViewController(vc, animated: true)
return
}
i+=1
}
vc = HomeViewController.instantiate()
vc.coordinator = self
navigationController.pushViewController(vc, animated: true)
}
func showDetail() {
var vc: DetailViewController
var i = 0
for viewController in navigationController.viewControllers {
if (viewController.isKind(of: DetailViewController.self)) {
vc = viewController as! DetailViewController
navigationController.viewControllers.remove(at: i)
navigationController.pushViewController(vc, animated: true)
return
}
i+=1
}
vc = DetailViewController.instantiate()
vc.coordinator = self
navigationController.pushViewController(vc, animated: true)
}
func showMasterDetail() {
var vc: MasterDetailViewController
var i = 0
for viewController in navigationController.viewControllers {
if (viewController.isKind(of: MasterDetailViewController.self)) {
vc = viewController as! MasterDetailViewController
navigationController.viewControllers.remove(at: i)
navigationController.pushViewController(vc, animated: true)
return
}
i+=1
}
vc = MasterDetailViewController.instantiate()
vc.coordinator = self
navigationController.pushViewController(vc, animated: true)
}
}
ЧТО-ТО ТАК, ЧТО Я ХОЧУ:
Это пример / псевдокод, потому что он не работает.Вы должны понять, что я имею в виду.Как будет выглядеть реальный код?
import Foundation
import UIKit
public final class MainCoordinator {
//..
func showHome() {
present(HomeViewController)
}
func showDetail() {
present(DetailViewController)
}
func showMasterDetail() {
present(MasterDetailViewController)
}
func present(myClass: Class){
var vc: myClass
var i = 0
for viewController in navigationController.viewControllers {
if (viewController.isKind(of: myClass.self)) {
vc = viewController as! myClass
navigationController.viewControllers.remove(at: i)
navigationController.pushViewController(vc, animated: true)
return
}
i+=1
}
vc = myClass.instantiate()
vc.coordinator = self
navigationController.pushViewController(vc, animated: true)
}
}