iOS架构和数据预取

时间:2015-12-12 19:37:15

标签: ios mvvm architecture viper-architecture

我一直在寻找一个优雅的解决方案一段时间没有幸福。

我想:

  • 解决VIPER,MVVM等人提出的大规模视图控制器问题
  • 始终在完全渲染的屏幕之间进行动画转换。

这就像打击Apple框架一样;视图控制器位于导航流的驱动器位置。我正在考虑改变它并在代码中进行整体导航,但问题是要创建哪种对象拥有视图控制器,何时进行实例化。活动指标将出现在源场景中。

1 个答案:

答案 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
    }
}

这可能看起来像很多步骤,但好消息:前面提到的插件也会自动化!