gpt4 book ai didi

swift - Swift 中的协议(protocol)扩展?

转载 作者:搜寻专家 更新时间:2023-11-01 06:48:20 26 4
gpt4 key购买 nike

我需要向 UICollectionViewDataSource 添加一些行为。

如果我要创建一个 Collection View 扩展,我会这样做:

extension UICollectionView
{
func thisWorks() {}
}

但尝试为数据源执行此操作会导致“无法扩展协议(protocol)‘UICollectionViewDataSource’”错误。

extension UICollectionViewDataSource
{
func thisDoesntWork() {}
}

有没有办法向协议(protocol)添加新功能?

最佳答案

Extensions 中所述:

Extensions add new functionality to an existing class, structure, or enumeration type

因此扩展协议(protocol)是不可能的——它们支持继承,这意味着您可以子类化协议(protocol)。

但是,我认为协议(protocol)扩展没有多大意义。如果您扩展 UICollectionViewDataSource,这意味着所有采用它的类都将无法编译,因为扩展设置了新的要求 - 包括 UIKit 类,例如 UICollectionViewController,它本身实现 UICollectionViewDataSource

对于您的情况,我认为有 2 种解决方案:

  • 创建一个继承自UICollectionViewDataSource的新协议(protocol)
  • 创建一个单独的协议(protocol),不链接到 UICollectionViewDataSource(但很可能具有相似的名称)

我会选择选项 no。 2,因为前者通过在类声明中隐藏 UICollectionViewDataSource 名称来降低代码的可读性。

关于swift - Swift 中的协议(protocol)扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26804703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com