不符合UITableViewDataSource

时间:2015-06-11 03:02:29

标签: swift

class EmployeeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {


var employees = [PFEmployee]()

var networking = Networking()

var plus: UIBarButtonItem!
var profile: UIBarButtonItem!

var tableView: UITableView = UITableView()

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.addSubview(tableView)


    tableView.delegate = self
    tableView.dataSource = self

    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

    tableView.setTranslatesAutoresizingMaskIntoConstraints(false)
    self.view.addConstraint(NSLayoutConstraint(item: tableView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Height, multiplier: 1.0, constant: 0.0))
    self.view.addConstraint(NSLayoutConstraint(item: tableView, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1.0, constant: 0.0))
    self.view.addConstraint(NSLayoutConstraint(item: tableView, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0.0))

}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return employees.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> CustomTableViewCell {
    let cell: CustomTableViewCell! = CustomTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "customCell")

    cell.nameLabel.text = employees[indexPath.row].name
    cell.pointsLabel.text = employees[indexPath.row].numberOfPoints.toString()
    cell.roleLabel.text = employees[indexPath.row].jobDesc
    cell.commentaryLabel.text = employees[indexPath.row].commentary

    return cell
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

出于某种原因,我遇到两个错误:

  1. Cannot assign a value of type 'EmployeeViewController' to a value of type 'UITableViewDataSource?'
  2. Type 'EmployeeViewController' does not conform to protocol 'UITableViewDataSource.'
  3. 我已经明确实施了所有必需的方法,所以我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的方法声明错误。改变这个:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> CustomTableViewCell {

到此:

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

(您的方法必须返回UITableViewCell,而不是CustomTableViewCell。)这种隐式转换在Objective-C中是可以的,但在Swift中是不允许的,其中转换必须是显式的。

一些无关的事情:

  • var tableView: UITableView = UITableView()可以只是let tableView = UITableView()
  • 您可以删除许多不必要的self.