在swift中,我正在实施两个协议GADCustomEventInterstitial
和GADCustomEventBanner
。
这两个协议都需要一个名为delegate
的属性。 delegate
在每个协议中都是不同的类型,因此会产生冲突。
class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate{
var delegate:GADCustomEventInterstitialDelegate?; // Name conflict
var delegate:GADCustomEventBannerDelegate?; // Name conflict
override init(){
}
...
}
答案 0 :(得分:4)
简单的答案是,你做不到。
也许一个协议依赖于另一个协议,在这种情况下,您可以使用依赖协议作为代理类型。
答案 1 :(得分:4)
它们是库/框架,它不是我的定义
然后显然你不能让同一个类采用这两种协议。但你真的不需要。只需将此功能分为两个不同的类,这些协议的设计者显然是这样想的。您应该有一个类采用GADCustomEventInterstitial并且其 delegate
,另一个类采用GADCustomEventBanner
并且其< / em> delegate
。你有什么理由试图强迫这些成为同一个班级?就像你使用框架的所有事情一样,不要战斗框架,服从它。
答案 2 :(得分:3)
实际上可能,我刚遇到同样的情况。我有两种不同但相关的协议。在某些情况下,我需要两个都由代表实现,在其他情况下只需要一个,我不想拥有两个属性,例如... delegate1,delegate2。
您需要做的是创建另一个从两个协议继承的组合协议:
protocol ChartBoostAdapterDelegate: GADCustomEventInterstitialDelegate, GADCustomEventBannerDelegate { }
class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate {
weak var delegate: ChartBoostAdapterDelegate?
override init(){
}
...
}