[英]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.