![](/img/trans.png)
[英]Setting protocol which inherits from another protocol as associated type produces error
[英]Can you extend a protocol that inherits from another protocol?
我想创建一个从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
不幸的是,您试图做的是不可能的。 问题在于这是一个Objective-C协议。 Objective-C从未听说过协议扩展。 因此,它不知道此协议扩展会将两个函数注入MyClass。 它看不到它们,因此就协议而言,它并没有得到满足。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.