繁体   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