![](/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.