gpt4 book ai didi

iOS 架构和数据预取

转载 作者:行者123 更新时间:2023-12-03 10:44:22 25 4
gpt4 key购买 nike

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

我想要:

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

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

    最佳答案

    不要放弃对抗 Apple MVC 框架!

  • 使用这个 Xcode 插件 (https://github.com/natangr/ViperTemplate) 自动创建和启动 VIPER 文件。
  • 阅读这篇文章,了解更多关于 VIPER 实例化的高级技巧(以及上述插件的解释):https://www.ckl.io/blog/best-practices-viper-architecture/

  • 拥有 自己路由器上的模块初始化代码将消除一堆代码重复,特别是对于大型项目。
    您需要创建一次这些扩展:

    // 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
    }
    }


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

    关于iOS 架构和数据预取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244104/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com