swift 中的协议继承
Protocol Inheritance in swift
我正在按照 this 教程在 swift 中执行 TDD。
大约进行到一半,有一点我们需要创建一个继承自 UITableViewController 的协议。代码如下所示:
import UIKit
protocol MenuTableDataSource : UITableViewDataSource {
func setMenuItems(menuItems: [MenuItem])
}
然后我们不久之后创建一个 class,它符合 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 中的可选项,但错误仍然存在。
我好像哪里出错了?看了作者最后给出的源码,同样的错误也存在,这让我觉得苹果可能在语法上做了一些我们不知道的改动。
有什么想法吗?
谢谢。
自 2014 年 9 月编写该教程以来,API 发生了很大变化。
查看 API 参考 UITableViewDataSource
here
即您使用的主要功能:
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
这些不再依赖于传入的展开的可选值(没有 !
附加)
Swift 是全新的,APIs 在 6 月和 11 月之间经历了很多变化,所以如果您正在在线阅读资料,最好在线查看官方文档。 (即使是官方 Xcode 版本和测试版有时也会有不同的 API)
我正在按照 this 教程在 swift 中执行 TDD。
大约进行到一半,有一点我们需要创建一个继承自 UITableViewController 的协议。代码如下所示:
import UIKit
protocol MenuTableDataSource : UITableViewDataSource {
func setMenuItems(menuItems: [MenuItem])
}
然后我们不久之后创建一个 class,它符合 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 中的可选项,但错误仍然存在。
我好像哪里出错了?看了作者最后给出的源码,同样的错误也存在,这让我觉得苹果可能在语法上做了一些我们不知道的改动。
有什么想法吗?
谢谢。
自 2014 年 9 月编写该教程以来,API 发生了很大变化。
查看 API 参考 UITableViewDataSource
here
即您使用的主要功能:
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
这些不再依赖于传入的展开的可选值(没有 !
附加)
Swift 是全新的,APIs 在 6 月和 11 月之间经历了很多变化,所以如果您正在在线阅读资料,最好在线查看官方文档。 (即使是官方 Xcode 版本和测试版有时也会有不同的 API)