簡體   English   中英

您可以擴展從另一個協議繼承的協議嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM