我正在关注this教程在swift中执行TDD。协议继承在swift中
大约一半时间,我们需要创建一个从UITableViewController继承的协议。代码如下所示:
import UIKit
protocol MenuTableDataSource : UITableViewDataSource {
func setMenuItems(menuItems: [MenuItem])
}
然后,我们创建一个类后不久,符合下面的代码到MenuTableDataSource:
import Foundation
import UIKit
class MenuTableDefaultDataSource : NSObject, MenuTableDataSource {
var menuItems: [MenuItem]?
func setMenuItems(menuItems: [MenuItem]) {
self.menuItems = menuItems
}
func tableView(tableView: UITableView!,
numberOfRowsInSection section: Int)
-> Int
{
return 1
}
func tableView(tableView: UITableView!,
cellForRowAtIndexPath indexPath: NSIndexPath!)
-> UITableViewCell!
{
return nil;
}
}
不过,我仍然得到一个错误说类型“MenuTableDefaultDataSource”呢不符合协议'UITableViewDataSource'。
我也尝试删除参数numberOfRowsInSection和cellForRowAtIndexPath中的optionals,但错误仍然存在。
我哪里似乎出错了?查看作者给出的最终源代码,同样的错误也存在,这让我认为苹果可能已经改变了我们不知道的语法中的某些东西。
任何想法?
谢谢。
是的,正如在OP中提到的,我试图删除!在参数和问题仍然存在。 有趣的是,当我开始输入'tableView'时,代码完成建议只显示了一些来自UITableViewDataSource的方法,比如titleForFooterInSection和titleForHeaderInSection。然而,我正在寻找的方法,即cellForRowAtIndexPath和numberOfRowsInSection不会由代码完成显示(即使这些方法的当前实现首先被显示)。我感到困惑,为什么会发生这种情况? – coldbuffet 2015-01-27 02:11:02
我只是把[this](http://pastebin.com/an6N0svT)放入故事板,编译器没有抱怨一件事(Xcode 6.2(6C107a))。 (这不是你如何返回'UITableViewCells',但你需要返回一些东西) – cjwirth 2015-01-27 02:25:00
看看你的代码后,我删除了方法签名和cellForRowAtIndexPath中的所有选项,我返回UITableViewCell()就像你做的那样,而不是零。这似乎解决了这个问题。非常感谢你! – coldbuffet 2015-01-27 02:33:01