2015-12-12 4 views
1

Я искал элегантное решение в течение некоторого времени без счастья.Архитектура iOS и предварительная выборка данных

Я хочу:

  • решить проблему массивной ViewController что VIPER, MVVM и др адрес,
  • всегда анимировать переход между полностью оказанными экранами.

Это похоже на борьбу с каркасами Apple; Контроллеры просмотра находятся в месте расположения водителей навигационного потока. Я собираюсь обратить вспять это и сделать общую навигацию в коде, но вопрос в том, какие объекты должны создавать собственные контроллеры представлений и когда создавать. Индикаторы активности будут отображаться в исходных сценах.

+0

пока все хорошо, в чем ваш вопрос? – luk2302

+0

Кто-нибудь видел твердый подход? –

ответ

0

Не отказывайтесь от борьбы с картой Apple MVC!

Имея код инициализации модуля на своем собственном маршрутизаторе устранит кучу коды повторения, специально для огромных проектов. Вам нужно создать эти расширения сразу:

// ReusableView.swift 
 
protocol ReusableView: class {} 
 

 
extension ReusableView { 
 
    static var reuseIdentifier: String { 
 
     return String(describing: self) 
 
    } 
 
} 
 

 

 
// UIViewController.swift 
 
extension UIViewController: ReusableView { } 
 

 

 
// UIStoryboard.swift 
 
extension UIStoryboard { 
 
    func instantiateViewController() -> T where T: ReusableView { 
 
     return instantiateViewController(withIdentifier: T.reuseIdentifier) as! T 
 
    } 
 
}

И затем, оставьте код инициализации на маршрутизаторе каждого модуля VIPER:

// MainSearchRouter.swift 
 
class MainSearchRouter { 
 

 
    // MARK: Properties 
 
    weak var view: UIViewController? 
 

 
    // MARK: Static methods 
 
    static func setupModule() -> MainSearchViewController { 
 
     let viewController = UIStoryboard(name: MainSearchViewController.storyboardName, bundle: nil).instantiateViewController() as MainSearchViewController 
 
     let presenter = MainSearchPresenter() 
 
     let router = MainSearchRouter() 
 
     let interactor = MainSearchInteractor() 
 

 
     viewController.presenter = presenter 
 

 
     presenter.view = viewController 
 
     presenter.router = router 
 
     presenter.interactor = interactor 
 

 
     router.view = viewController 
 

 
     interactor.output = presenter 
 

 
     return viewController 
 
    } 
 
}

It может показаться много шагов, но хорошие новости: t он вышеупомянутый плагин также автоматизирует это!

Смежные вопросы