我想创建一个继承自UICollectionViewDataSource
的协议,并使用协议扩展来提供所需UICollectionViewDataSource
方法的默认实现。但是,当我尝试声明符合此协议的类时,编译器会说Type 'MyClass' does not conform to protocol UICollectionViewDataSource'
。
protocol MyDataSource : UICollectionViewDataSource {
var values: [String] { get }
}
extension MyDataSource {
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = UICollectionViewCell() // TODO: dequeue
// TODO: configure cell ...
return cell
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.values.count
}
}
class MyClass : NSObject, MyDataSource {
var values = [String]()
}
我还尝试将扩展名声明为以下内容,但仍然收到相同的编译器错误:
extension UICollectionViewDataSource where Self : MyDataSource
我甚至尝试将此扩展到所有UICollectionViewDataSources
以查看继承部分是否可行,但没有骰子相同的错误。
extension UICollectionViewDataSource
答案 0 :(得分:5)
不幸的是,你想做的事情是不可能的。问题是这是一个Objective-C协议。 Objective-C从未听说过协议扩展。因此,它不知道此协议扩展是将两个函数注入MyClass。它无法看到它们,因此就其而言,不满足协议要求。