Ios 如何在Swift中使用具有相同协议变量的多个协议?

Ios 如何在Swift中使用具有相同协议变量的多个协议?,ios,swift,protocols,Ios,Swift,Protocols,在swift中,我实现了两个协议,GADCustomEventInterstitual和GADCustomEventBanner 这两个协议都需要一个名为delegate的属性委托在每个协议中是不同的类型,因此会产生冲突 class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate{ var delegate:GADCustomEv

在swift中,我实现了两个协议,
GADCustomEventInterstitual
GADCustomEventBanner

这两个协议都需要一个名为
delegate
的属性<代码>委托在每个协议中是不同的类型,因此会产生冲突

 class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate{
        var delegate:GADCustomEventInterstitialDelegate?; // Name conflict
        var delegate:GADCustomEventBannerDelegate?; // Name conflict
         override init(){

        }
    ...

    }

简单的答案是你不能


可能一个协议依赖于另一个协议,在这种情况下,您将对委托的类型使用依赖协议


它们是库/框架这不是我的定义


显然,您不能让同一个类同时采用这两种协议。但你真的不需要。只需将此功能分为两个不同的类,这显然是这些协议的设计者的意图。您应该有一个类采用GADCustomEventInterstitial并具有其
委托
,另一个类采用
GADCustomEventBanner
并具有其
委托
。你有什么理由强迫他们成为同一类人?正如在所有使用框架的事情中一样,不要反对框架,服从它。

事实上这是可能的,我只是遇到了同样的情况。我有两种不同但相关的协议。在某些情况下,我需要两者都由委托实现,在其他情况下,只有一个,我不想有两个属性,例如。。。委派1,委派2

您需要做的是创建另一个从两个协议继承的组合协议:

protocol ChartBoostAdapterDelegate: GADCustomEventInterstitialDelegate, GADCustomEventBannerDelegate { }


class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate {

    weak var delegate: ChartBoostAdapterDelegate?

    override init(){

    }
    ...

}

不要在协议定义中同时称它们为
delegate
。它们是库/框架。这不是我的定义,那么一个类不能同时采用它们。“也许一个协议依赖于另一个协议”,不幸的是,它不能;我看了看(