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