Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何区分在视图中放置的代码和在ViewController中放置的代码?_Ios_Swift_Model View Controller - Fatal编程技术网

Ios 如何区分在视图中放置的代码和在ViewController中放置的代码?

Ios 如何区分在视图中放置的代码和在ViewController中放置的代码?,ios,swift,model-view-controller,Ios,Swift,Model View Controller,我在我的UIView子类中实现了相当大的目标操作,因此我的视图文件(来自MVC)似乎有一些代码,这些代码实际上与在屏幕上排列UIView对象无关。这是遵循MVC模式的正确方式吗?如果没有,正确的解决方法是什么?我不会谈论MVC的正确实现,因为这是一个可以在互联网上找到的详尽主题。就个人而言,我喜欢将所有视图代码封装在UIView的自定义视图子类中,并使用ViewController管理交互、委托、数据源和其他事件 类自定义视图:UIView{ func addSubviewsToView() f

我在我的
UIView
子类中实现了相当大的目标操作,因此我的视图文件(来自MVC)似乎有一些代码,这些代码实际上与在屏幕上排列
UIView
对象无关。这是遵循MVC模式的正确方式吗?如果没有,正确的解决方法是什么?

我不会谈论MVC的正确实现,因为这是一个可以在互联网上找到的详尽主题。就个人而言,我喜欢将所有视图代码封装在UIView的自定义视图子类中,并使用ViewController管理交互、委托、数据源和其他事件

类自定义视图:UIView{
func addSubviewsToView()
func configureLayout()
}
类CustomViewController:UIViewController{
var childView:CustomView!
func addCustomViewToViewControllerView()
func addTargetsAndGestureRecognitors()
func configureAnyViewDelegates()
func configureAnyDataSources()
}
可以有一个冗长的自定义视图类或冗长的视图控制器。这不一定是个问题。当没有一个组织模式来管理你的选择时,这可能会成为一个问题

GitHub存储库中大致概述了一种区分视图和控制器代码的有趣组织模式


我使用了这个概念中的一些片段来帮助自己组织视图和控制器代码。希望这能有所帮助。

这完全取决于这些目标操作在做什么

  • 如果它们与视图相关(例如,用于拉出菜单、向后滑动菜单、移动子视图等的控件),那么将所有这些封装在视图类中可能是合理的

  • 但是,如果这些操作包括业务逻辑、网络请求、本地数据存储操作等,那么将它们存储在
    UIView
    子类下可能与您应该做的完全相反

就构建应用程序的模式而言,有许多备选方案,包括:

  • 请看戴夫·德隆的《拥抱MVC,但采用技术使其小型化和易于管理》一书

  • 有关MVP、MVVM、Viper等其他方法的回顾,请参见媒体

  • 请参阅Krzysztof Zabłocki的另一篇关于该主题的精彩讨论

我不打算把我的大拇指放在天平上,提倡一种特定的模式而不是另一种模式(这是一个意见问题,因此,对于堆栈溢出来说是离题的),但当您通读以上所有内容时,一致的主题是职责分离,使我们的代码更容易推理,并改进了可测试性


总之,将特定于视图的代码移动到您的
UIView
子类中是可以的,但将业务/应用程序逻辑放到视图中是一种反模式。

如果您能够显示“代码……并没有真正连接到UIView对象”是什么,这会有所帮助。也许它是模型材质,也许它是控制器材质,但是如果不显示它,我们怎么知道呢?即便如此,这也可能是一个基于观点的问题,但目前你所指的完全是猜测。还要记住,MVC并不是唯一的哲学。