【问题标题】:iOS Architecture and Data PrefetchingiOS 架构和数据预取
【发布时间】:2016-03-18 13:55:38
【问题描述】:

一段时间以来,我一直在寻找一个优雅的解决方案,但并不快乐。

我想:

  • 解决 VIPER、MVVM 等人解决的大规模视图控制器问题,
  • 始终在完全渲染的屏幕之间设置动画过渡。

这感觉就像是在与 Apple 框架作斗争;视图控制器位于导航流程的驾驶座上。我正在考虑扭转这种情况并在代码中进行整体导航,但问题是要创建什么样的对象来拥有视图控制器,以及何时实例化。活动指示器将位于源场景上。

【问题讨论】:

  • 到目前为止一切顺利,您有什么问题?
  • 有人见过可靠的方法吗?

标签: ios mvvm architecture viper-architecture


【解决方案1】:

不要放弃与 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
    }
}

这看起来可能需要很多步骤,但好消息是:前面提到的插件也可以自动完成!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2014-08-13
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多