我需要向UICollectionViewDataSource添加一些行为。
如果我要创建一个Collection View扩展,我会这样做:
extension UICollectionView
{
func thisWorks() {}
}
但是尝试为数据源执行此操作会导致"协议' UICollectionViewDataSource'不能延长"错误。
extension UICollectionViewDataSource
{
func thisDoesntWork() {}
}
有没有办法在协议中添加新的功能?
答案 0 :(得分:2)
如Extensions中所述:
扩展程序为现有的类,结构或枚举类型添加新功能
因此扩展协议不可能 - 它们支持继承,这意味着您可以对协议进行子类化。
但是,我认为协议扩展没有多大意义。如果扩展UICollectionViewDataSource
,则意味着所有采用它的类都将无法编译,因为扩展设置了新的需求 - 包括U UICollectionViewController
等UIKit类,它本身实现UICollectionViewDataSource
在您的情况下,我认为有两种解决方案:
UICollectionViewDataSource
UICollectionViewDataSource
(但很可能具有相似的名称)我会选择选项号。 2,因为前者通过在类声明中隐藏UICollectionViewDataSource
名称而使代码的可读性降低。
答案 1 :(得分:1)
简而言之,没有。而且你不需要 - 任何期望与UICollectionViewDataSource
一起工作的东西只能期待特定的方法。只需声明自己的自定义协议,符合该协议,然后在适当的类中使用它:
extension MyCustomCollectionViewDataSource {
func thisWorks() {}
}