我想创建一个继承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]()
}
Run Code Online (Sandbox Code Playgroud)
我也尝试将扩展名声明为以下内容,但仍然收到相同的编译器错误:
extension UICollectionViewDataSource where Self : MyDataSource
Run Code Online (Sandbox Code Playgroud)
我甚至尝试将此扩展到所有人UICollectionViewDataSources,看看继承部分是否可行,但没有骰子相同的错误.
extension UICollectionViewDataSource
Run Code Online (Sandbox Code Playgroud)
不幸的是,你要做的事情是不可能的.问题是这是一个Objective-C协议.Objective-C从未听说过协议扩展.因此,它不知道此协议扩展是将两个函数注入MyClass.它无法看到它们,因此就其而言,不满足协议要求.