为什么我们必须符合UIViewController和UITableViewDataSource?

时间:2016-09-20 17:15:51

标签: ios swift uitableview

目前,我想要一个单独的数据类。但是,我不能只声明这样的类:

class DataSource: UITableViewDataSource

这会给我带来很多错误。而且,我必须这样做:

class DataSource: UIViewController, UITableViewDataSource

那么,为什么?我来自Java背景,所以我不明白为什么我必须实现A来实现B.我试着阅读Apple的官方文档,但我找不到答案。

编辑:这是错误:

Type 'DataSource' does not conform to protocol 'UITableViewDataSource'
Type 'DataSource' does not conform to protocol 'NSObjectProtocol'

并且,XCode建议解决它的方法是在覆盖函数的开头添加“@objc”。修复后仍然存在错误。

编辑2:我知道我需要实现2个函数才能使数据源正常工作。但是,如果没有实现UIViewController,它将无法工作。

enter image description here

添加UIViewController后会起作用!

enter image description here

1 个答案:

答案 0 :(得分:1)

协议UITableViewDataSource来自NSObjectProtocol。因此,您必须使您的类继承自NSObject以符合NSObjectProtocol。 Vanilla Swift课程没有。但UIKit的许多部分都期望NSObjects。您必须实现此协议所需的方法。请尝试以下代码:

class DataSource: NSObject, UITableViewDataSource {

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
}