【问题标题】:How to avoid bloated ViewController in MVC with Swift?如何使用 Swift 在 MVC 中避免臃肿的 ViewController?
【发布时间】:2015-11-07 11:27:43
【问题描述】:

我试图保持 Apple MVC 设计模式,其中视图接收输入并将其传递给控制器​​。为了使控制器保持纤薄并避免它变成臃肿的GodClass 来完成所有工作,我正在尝试创建UIView 的子类并在那里接收用户输入以传递给控制器​​进行处理。但我遇到了如何在 Swift 中最好地做到这一点的问题。

为了将用户输入从视图传递到控制器,我的UIView 子类需要与关联的ViewController 通信,但我已经看到关于不推荐这样做的帖子。例如,This Q&A 建议这很糟糕,但建议使用委托方法。来自同一问答的评论也指出这很糟糕。

Apple 自己的 MVC 示例没有演示单独的 UIView 子类,而是使用了现有的 UITableView,它全部编码在父 UIViewController 中,使其成为臃肿的控制器,而不是瘦控制器。

如何最好地解决这个问题?

【问题讨论】:

    标签: swift model-view-controller uiview uiviewcontroller delegates


    【解决方案1】:

    我建议你阅读苹果关于 MVC 模式的文档,因为我注意到你并不真正理解该模式的原理:Model-View-Controller

    为了构建更轻量的ViewController,看这个问题:Lighter View Controllers

    您可能还对 MVVM 感兴趣(用于 Cocoa&CocoaTouch 进​​行 VC 细化)
    看看这篇文章:Introduction to MVVM

    【讨论】:

      【解决方案2】:

      您对臃肿的视图控制器的体验不一定是您误解 MVC 模式的错。 iOS 开发人员 Ilya Punchka 在他关于 View Controller Thinning 的教程帖子中写道:

      关于这个话题已经说了很多,未来还会说更多,因为不幸的是没有灵丹妙药,视图控制器在许多项目中仍然很庞大。最近,Andy Matuschak 向Let's Play: Refactor the Mega Controller! 介绍了有关此主题的实时编码会议。所以你可以看到这是一个众所周知但仍然存在的问题。

      Apple 的示例代码对这种情况没有帮助,该示例代码还演示了大规模视图控制器综合症!查看上面的链接(虽然第一个是在 Swift 2.0 中,我在将他的依赖项更新到 Swift 3.0 时遇到了麻烦),它们都对围绕这个主题的一些想法进行了有用的监督。

      【讨论】:

      • 实际上,我越是学习如何为 iOS 和 Swift 编写代码,越是越过越过新的视野,就会发现要学习的内容越多……!
      【解决方案3】:

      我建议在此处查看 LetsBuildThatApp 剧集“Swift:Firebase 3 - 如何从控制器中重构视图代码(第 23 集)”:

      https://youtu.be/F3snOdQ5Qyo

      展示了一种从控制器中重构视图代码的好方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-17
        • 2012-01-05
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 2015-03-17
        • 1970-01-01
        • 2011-03-18
        相关资源
        最近更新 更多