【问题标题】:How can we inherit UITableViewDataSource protocol in our class?我们如何在我们的类中继承 UITableViewDataSource 协议?
【发布时间】:2014-06-13 08:45:41
【问题描述】:

我想在我的应用程序中使用表格视图。但是当我向 UITableViewDataSource 确认我的视图控制器时,它会给出图像中显示的错误。如何在我们的类中使用 UITableViewDataSource 协议。

【问题讨论】:

    标签: swift ios8 xcode6


    【解决方案1】:

    这不是指定协议一致性的正确方法。这是正确的语法。

    class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
        // stuff
    }
    

    如果您仍然看到该错误,那是因为您的类没有实现这些委托的所需方法,在本例中是 numberOfRowsInSection.... 和 cellForRowAtIndexPath....

    【讨论】:

    • @Rahul 那是出于不同的原因。我向您展示的是使您的类符合协议的正确方法,但是现在,您看到了该错误,因为您的类没有从这些委托中实现所需的方法,在本例中为 numberOfRowsInSection ... . 和 cellForRowAtIndexPath....
    • 感谢您的建议。但是首先我们继承协议,然后我们可以使用方法。在确认协议之前,您可以访问委托方法吗?
    • @Rahul 不是通过自动完成,不。
    【解决方案2】:

    我建议使用类扩展来符合协议,这种隔离使你的代码在你的类长大后更易于维护,例如:

    class MainViewController: UIViewController {
    
       // ...
    
    }
    

    您可以使用协议对其进行扩展

    extension MainViewController: UITableViewDataSource {
    
        func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
            return 0
        }
    
        func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
            return nil
        }
    
        // ... 
    
    }
    

    extension MainViewController: UITableViewDelegate {
    
        // ...
    
    }
    

    【讨论】:

    • 但是在这种情况下我应该在哪里设置 tableview.delegate = self?
    • 这取决于您在哪里声明了您的出口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 2020-11-24
    相关资源
    最近更新 更多