簡體   English   中英

Swift中的協議擴展?

[英]Protocol Extension in Swift?

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

如果我要創建一個Collection View擴展,我會這樣做:

extension UICollectionView
{
  func thisWorks() {}
}

但是嘗試為數據源執行此操作會導致“協議”UICollectionViewDataSource'無法擴展“錯誤。

extension UICollectionViewDataSource
{
  func thisDoesntWork() {}
}

有沒有辦法為協議添加新的功能?

擴展中所述

擴展為現有的類,結構或枚舉類型添加新功能

因此,延伸的協議是不可能的-他們支持繼承,這意味着你也可以繼承的協議。

但是,我認為協議擴展沒有多大意義。 如果擴展UICollectionViewDataSource ,則意味着所有采用它的類都將無法編譯,因為擴展設置了新的需求 - 包括UIKit類,例如UICollectionViewController ,它本身實現了UICollectionViewDataSource

在您的情況下,我認為有兩種解決方案:

  • 創建從UICollectionViewDataSource繼承的新協議
  • 創建一個單獨的協議,沒有鏈接到UICollectionViewDataSource (但很可能有一個類似的名稱)

我會選擇選項號。 2,因為前者通過在類聲明中隱藏UICollectionViewDataSource名稱而使代碼可讀性UICollectionViewDataSource

簡而言之,沒有。 並且你不需要 - 任何期望使用UICollectionViewDataSource東西只期望特定的方法存在。 只需聲明自己的自定義協議,符合該協議,然后在適當的類中使用它:

extension MyCustomCollectionViewDataSource {
    func thisWorks() {}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM