Ios 是否符合Swift中的UITableViewDelegate和UITableViewDatasource?

Ios 是否符合Swift中的UITableViewDelegate和UITableViewDatasource?,ios,swift,uitableview,Ios,Swift,Uitableview,我正在学习swift 2.0,我想知道您是否仍然需要添加代码tableView.datasource=self和tableView.delegate=self以符合协议 示例代码: class AboutViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { override func viewDidLoad() { super.viewDidLoad()

我正在学习swift 2.0,我想知道您是否仍然需要添加代码
tableView.datasource=self
tableView.delegate=self
以符合协议

示例代码:

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=self
aboutTableView.delegate=self
,则我的表视图为空。为什么会这样

这段代码是否仍然需要,因为我看到很多youtube教程在swift中不再包含这段代码,我很困惑为什么我的教程没有它就不能工作?

是的,仍然需要一些作业。
或者通过代码显式地

相反,您可以在interface builder中连接它们,使通过代码的显式赋值过时。这可能是很多教程所做的

是的,仍然需要一些作业。
或者通过代码显式地

相反,您可以在interface builder中连接它们,使通过代码的显式赋值过时。这可能是很多教程所做的


首先,这完全独立于哪种语言 您可以使用Swift或Objective-C

但有两种不同的情况可能导致混淆:

A
UITableViewController
子类:

UITableViewController
已符合
UITableViewDataSource
UITableViewDelegate
。它有一个
tableView
属性, 其
dataSource
delegate
属性已设置为
self

在子类中,通常重写 数据源和委托方法

A
UIViewController
带有
UITableView
属性的子类:

在这里,您在子类中定义了一个
UITableView
属性 并在代码中初始化它,或者 将其连接到interface builder中的表视图

在这种情况下,您必须设置
数据源
委托
tableview的属性,在代码中或在接口中 建筑商,如中所述

如果数据源和委托是视图控制器本身, 然后您必须明确声明协议一致性, 实施 数据源和委托方法(但不重写 超类方法)


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

首先,它完全独立于哪种语言 您可以使用Swift或Objective-C

但有两种不同的情况可能导致混淆:

A
UITableViewController
子类:

UITableViewController
已符合
UITableViewDataSource
UITableViewDelegate
。它有一个
tableView
属性, 其
dataSource
delegate
属性已设置为
self

在子类中,通常重写 数据源和委托方法

A
UIViewController
带有
UITableView
属性的子类:

在这里,您在子类中定义了一个
UITableView
属性 并在代码中初始化它,或者 将其连接到interface builder中的表视图

在这种情况下,您必须设置
数据源
委托
tableview的属性,在代码中或在接口中 建筑商,如中所述

如果数据源和委托是视图控制器本身, 然后您必须明确声明协议一致性, 实施 数据源和委托方法(但不重写 超类方法)


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

与语言无关。–但请注意,如果您有UIViewController或UITableViewController子类,则情况略有不同。后者已经为自己设置了tableView的委托和数据源。从功能上讲,Swift的行为与Objective没有什么不同。Swift的力量来自于语言的特点,即语言独立性但请注意,如果您有UIViewController或UITableViewController子类,则情况略有不同。后者已经为自己设置了tableView的委托和数据源。从功能上讲,Swift的行为与Objective没有什么不同。Swift的力量来自于语言的特性。很好的补充,我不知道UITableViewController已经是它自己的数据源和委托-我想我从来没有子类化过一个,但总是使用常规的UIViewController。很好的补充,我不知道UITableViewController已经是它自己的数据源和委托了,我想我从来没有子类化过它,而是一直使用常规的UIViewController。