为什么有必要两次声明datasource / delegate

时间:2016-12-16 14:10:09

标签: xcode swift3

将表格视图添加到视图控制器后,我在界面生成器中控制 - 从电视拖动两次到VC,以指定VC是表格视图的数据源和委托。

在视图控制器中,我必须在类定义或视图控制器扩展中指定相同的内容。

这是为什么?这不是多余的吗?

感谢。

2 个答案:

答案 0 :(得分:5)

完全没有。你在做什么是两件事。

extension告诉编译器"此类符合UITableViewDatasourceUITableViewDelegate协议,因此可以用于UITableView "

在Interface Builder中,您告诉UITableView"此类是我希望您将其用作datasourcedelegate"。

答案 1 :(得分:0)

这当然不是多余的。

从名称的不同可以看出,“委托”和“数据源”是不同的东西。

数据源回答有关表视图显示的数据的问题。例如,每个部分有多少行?有几个部分?表格查看单元格多长时间?每个部分的页眉视图和页脚视图是什么?

另一方面,代表回答有关表视图行为的问题。例如,当用户选择一个单元格时应该做什么?当用户取消选择单元格时应该怎么做?用户结束编辑时应该怎么做?

由于数据源和委托的功能非常不同,类可能只是数据源而不是委托,反之亦然。这就是你拖两次的原因,一次说VC是数据源,一次说VC就是委托。

但是,不仅任何VC都可以是数据源和代理。您必须告诉编译器您的VC能够成为数据源和委托。这就是你写的原因:

class MyVC: UITableViewDelegate, UITableViewDataSource {}

如果您认为这有两个麻烦,请尽可能使用UITableViewController