我正在尝试保持Apple MVC设计模式,其中视图接收输入并将其传递给控制器。为了保持控制器的精简并避免它变成膨胀GodClass
完成所有工作,我试图创建一个UIView
的子类并接收用户输入以传递给控制器进行处理。但是我遇到了如何在Swift中做到这一点的问题。
为了将用户输入从视图传递到控制器,我的UIView
子类需要与关联的ViewController
进行通信,但是我在SO上看过关于这是怎么回事的帖子不建议。例如,This Q&A建议这很糟糕,但建议采用委托方法。来自同一Q& A的评论也指出这很糟糕。
Apple自己的MVC示例并没有展示单独的UIView
子类,而是使用现有的UITableView
,它都在父UIViewController
内编码,它是一个臃肿的,而不是一个薄的控制器。
如何最好地接近这个?
答案 0 :(得分:3)
我建议你阅读苹果关于MVC模式的文档,因为我注意到你并不真正理解模式的原理:Model-View-Controller
为了构建更轻的ViewController,请查看此问题:Lighter View Controllers
您可能也对MVVM(在Cocoa和CocoaTouch中用于VC细化)感兴趣 看看这篇文章:Introduction to MVVM
答案 1 :(得分:1)
您对膨胀的View控制器的体验并不一定是您误解MVC模式的错误。 iOS开发人员Ilya Punchka在他关于View Controller Thinning的教程帖子中写到了这一点并写道:
已经有很多关于这个话题的说法,未来会更多地说,不幸的是没有银弹,视图控制器仍然在许多项目中保持庞大。最近,Andy Matuschak就此主题提交了Let's Play: Refactor the Mega Controller!现场编码会议。所以你可以看到这是一个众所周知的问题。
Apple的示例代码也没有帮助这种情况,该代码也展示了大量的视图控制器综合症!看看上面的链接(虽然第一个是在Swift 2.0中,我遇到了将其依赖性更新为Swift 3.0的麻烦),但他们都对围绕这个主题的一些想法进行了有用的监督。
答案 2 :(得分:-1)
我建议看一下LetsBuildThatApp剧集" Swift:Firebase 3 - 如何重构从控制器中查看代码(第23集)"在这里:
显示从控制器中重构View代码的一种非常好的方法。