键入' ThirdViewController'不符合协议UITableViewDataSource

时间:2017-05-26 18:13:22

标签: swift uitableview

我已经启动了我的第一个应用,我希望该应用有一个可作为待办事项列表的视图,但是,我正在键入' ThirdViewController'不符合协议UITableViewDataSource 作为我的代码中的错误。我已经看了一个类似的线程,但没有找到解决方案

import UIKit

class ThirdViewController: UIViewController, UITableViewDataSource, UITableViewDelegate  
{
    var list = ["Math Homework", "English Project", "Bio Quiz"]

    @IBOutlet weak var myTableView: UITableView!

    override func viewDidLoad() 
    {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() 
    {
        super.didReceiveMemoryWarning()
    }


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

    public func tableView(tableView: UITableView, cellForRowAt indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "cell")
        cell.textLabel?.text = list[indexPath.row]

        return cell
    }
}

2 个答案:

答案 0 :(得分:1)

如Apple Developer文档中所述,您需要以下方法:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

您改为使用这些:

public func tableView(tableView: UITableView, cellForRowAt indexPath: NSIndexPath) -> UITableViewCell
public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

从这两种方法中删除public,它应该可以正常工作。另外,请在_之前添加tableView:

参考:

https://developer.apple.com/reference/uikit/uitableviewdatasource

修改 我描述的方法适用于Swift 3.如果您使用的是Swift 2.3,这些应该是您的方法:

func tableView(tableView: UITableView, cellForRowAt indexPath: NSIndexPath) -> UITableViewCell
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

几乎与您在第一时间使用的相同,但没有public

答案 1 :(得分:0)

为UITableViewDataSource和UITableViewDelegate实现所需的协议方法。

你失踪了;

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