如何使用Swift避免MVC中的ViewController臃肿?

如何使用Swift避免MVC中的ViewController臃肿?,swift,model-view-controller,uiview,uiviewcontroller,delegates,Swift,Model View Controller,Uiview,Uiviewcontroller,Delegates,我试图保持Apple MVC设计模式,视图接收输入并将其传递给控制器。为了保持控制器的精简,避免它变成一个臃肿的GodClass来完成所有的工作,我尝试创建UIView的子类,并在那里接收用户输入以传递给控制器进行处理。但我遇到了如何在Swift中最好地做到这一点的问题 为了将用户输入从视图传递到控制器,myUIView子类需要与相关的ViewController进行通信,但我已经看到了关于如何不建议这样做的帖子,例如,建议这样做不好,但建议采用委托方式。来自同一问答的评论也指出,这是不好的 苹

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

为了将用户输入从视图传递到控制器,my
UIView
子类需要与相关的
ViewController
进行通信,但我已经看到了关于如何不建议这样做的帖子,例如,建议这样做不好,但建议采用委托方式。来自同一问答的评论也指出,这是不好的

苹果自己的MVC示例没有演示一个单独的
UIView
子类,而是使用了现有的
UITableView
,这些都是在父级
UIViewController
中编码的,使其成为一个臃肿的控制器,而不是一个精简的控制器


如何最好地实现这一点?

我建议您阅读苹果的doc on MVC模式,因为我注意到您并不真正理解该模式的原理:

要构建更轻的ViewController,请查看以下问题:

您可能还对MVVM(用于可可和椰果酱中的VC稀释)感兴趣

请看这篇文章:

您使用臃肿视图控制器的经验不一定是因为您误解了MVC模式。iOS开发者Ilya Punchka在他的教程文章中写到了这一点,并写道:

关于这个话题已经说了很多,将来还会说更多,因为不幸的是,在许多项目中,没有银弹,视图控制器仍然是巨大的。最近,Andy Matuschak介绍了关于这个主题的实时编码会话。所以你可以看到这是一个众所周知的问题,也是一个实际的问题


苹果的示例代码也显示了大量的视图控制器综合症,这对这种情况没有帮助!查看上面的链接(尽管第一个链接是在Swift 2.0中,我在更新他的依赖关系到Swift 3.0时遇到了麻烦),它们都提供了关于这个主题的一些有用的指导

我建议看一下LetsBuildThatApp的一集“Swift:Firebase 3-如何重构控制器外的视图代码(Ep 23)”,这里:


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

事实上,我越是深入学习如何为iOS和Swift编写代码,我就越是失望地发现,在你走过每一个新的地平线时,要学习的内容太多了。。。。!