在Swift中符合UITableViewDelegate和UITableViewDatasource?

我正在学习Swift 2.0,我想知道如果你仍然需要添加代码tableView.datasource = selftableView.delegate = self像Obj-C符合协议?

示例代码:

 class AboutViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { override func viewDidLoad() { super.viewDidLoad() // conform to protocols aboutTableView.dataSource = self aboutTableView.delegate = self } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 2 } func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return 50 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // Code here } } 

现在,表格视图会在每个单元格中加载正确的数据。

但是,如果我从viewDidLoad删除aboutTableView.datasource = selfaboutTableView.delegate = self ,我的表视图是空的。 为什么是这样?

这段代码仍然是必需的,因为我看到许多YouTube的教程,不再包括这个在迅速,而我很困惑,为什么我不工作没有它?

首先,这是完全独立于你使用哪种语言,Swift或Objective-C。

但有两种情况可能会造成混淆:

一个UITableViewController子类:

UITableViewController已经符合UITableViewDataSourceUITableViewDelegate 。 它有一个tableView属性,其dataSourcedelegate属性已经设置为self

在你的子类中,你通常会覆盖数据源和委托方法。

具有UITableView属性的UIViewController子类:

这里你已经在你的子类中定义了一个UITableView属性,并在你的代码中初始化它,或者把它连接到界面生成器中的一个表格视图。

在这种情况下,您必须设置tableview的dataSourcedelegate属性,无论是在代码中还是在界面构build器中,如luk2302的答案中所述 。

如果数据源和委托是视图控制器本身,则必须显式声明协议一致性,并实现数据源和委托方法(但不覆盖超类方法)。


当然,在这两种情况下,表视图数据源和委托可以被设置为不同的对象,它不一定是视图控制器本身。

是的, 一些分配仍然是必需的。
要么明确地通过代码

要么

你可以做的是将它们连接到接口生成器中,通过代码进行明确的分配。 这可能是很多教程做的。

在这里输入图像说明