1
我想创建一个继承自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
我不明白为什么子类化是不好的。这正是我即将提出的建议。这就是我们在协议扩展出现之前做了数百年的通用功能的继承,对我们来说这已经足够了! – matt
我已经找到了一些很棒的用途。当然,它们已经彻底改变了标准库的结构。 – matt