为什么我必须设置dataSource并委托给self?

Mar*_*cel 13 uitableview ios swift

我正在快速学习,而我正在学习的课程教授tableViews.我必须设置TableViewControllert include UITableViewDataSourceUITableViewDelegate.然后,在viewDidLoad,我必须设置

tableView.dataSource = self
tableView.delegate = self
Run Code Online (Sandbox Code Playgroud)

为了使tableView出现并加载数据.

为什么我要这样做?

iam*_*ish 21

既然你说你正在学习斯威夫特只是想写一个赞美的答案.所有其他答案已经解释了为什么需要将委托设置为self或任何类的实例.但我仍然想到写这个答案只是为了提供更多的见解.

让我解释一下UITableViewDelegate和UITableViewDataSource是什么.UITableViewDelegate和UITableViewDataSource都是协议.什么是协议?您可以将协议视为一组操作.

例如,UITableViewDataSource有一组动作/方法,如 tableView(:numberOfRowsInSection :),tableView( tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath)等等.

该协议所暗示的是,如果要将自定义数据提供给tableview,则需要遵循此协议,即实现协议的非可选方法(如果有的话,可以忽略可选方法).

同样,UITableViewDelegate有一组方法,如tableView(_ tableView:UITableView,heightForRowAtIndexPath indexPath:NSIndexPath),tableView(_ tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath)等等.

UITableViewDelegate协议意味着如果您希望在桌面视图中发生用户交互时收到通知,则需要符合协议,例如当用户点击tableview的单元格时.

所以现在,你为什么要设置

tableView.dataSource = self
tableView.delegate = self
Run Code Online (Sandbox Code Playgroud)

是因为您在ViewController,TableViewDatasource协议中实现协议(或符合协议)以向tableview提供您自己的数据,TableViewDelegate协议在用户与您的tableview交互时通知您的ViewController类.

实际上,您不会始终将协议一致性设置为self,您可以将其设置为实现协议的任何类的实例.

希望这可以帮助.

有关协议的更多参考,您可以阅读:Swift 2教程第3部分:元组,协议,代理和表视图

  • 非常有用的答案. (3认同)

Thi*_*ilo 7

您必须设置数据源和视图委托才能使视图生效.那些不必是self(即控制器),它可以是一些其他对象(或两个其他对象,一个数据源和一个视图委托).

看来你已经在你的控制器中实现了两个方法,所以它可以作为全部三个(控制器,数据源,视图委托).但你还是要告诉它有关它的观点.