我一直在玩协议扩展,但遇到了问题。也许我想要达到的目标无法完成。我有这个游乐场:
//: Playground - noun: a place where people can play
import UIKit
protocol ArrayContainer {
typealias T
var array: [T] { get }
}
class MyViewController: UIViewController, ArrayContainer, UITableViewDataSource {
typealias T = String
var array = ["I am", "an Array"]
}
extension UITableViewDataSource where Self: ArrayContainer {
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return array.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Whatever
return UITableViewCell()
}
}
这就是我所拥有和想要的:
- 我有一个协议 <code>ArrayContainer,它只有一个 typealias 和一个包含此 typealias 类型对象的数组
- 我有一个<code>UITableViewDataSource的协议扩展,当类符合<code>ArrayController协议时使用。这只是将数组的项目数作为行数返回。该
cellForRowAtIndexPath
方法没有很好地实现,但这不是问题。 - 我有一个名为<code>MyViewController的<code>UIViewController子类,它实现了这两种协议。
问题是编译器抱怨因为 MyViewController 不符合,UITableViewDataSource
但据我所知,它应该被 UITableViewDataSource 扩展覆盖。我在这里错过了什么吗?或者可能无法扩展 Objective-C 协议?