NJG*_*GUY 5 protocols ios swift
我正在迅速实现两个协议, GADCustomEventInterstitial和GADCustomEventBanner。
这两个协议都需要一个名为的属性delegate。delegate每种协议中的术语是不同的类型,因此会产生冲突。
class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate{
var delegate:GADCustomEventInterstitialDelegate?; // Name conflict
var delegate:GADCustomEventBannerDelegate?; // Name conflict
override init(){
}
...
}
Run Code Online (Sandbox Code Playgroud)
它们是库/框架,这不是我的定义
那么显然你不能让同一个类采用两种协议。但你真的不需要。只需将此功能分为两个不同的类,这显然是这些协议设计者的意图。你应该有一类是采用GADCustomEventInterstitial并具有其 delegate和另一个是采用类GADCustomEventBanner和具有它的 delegate。你有什么理由试图强迫它们成为同一个类?就像在使用框架的所有事情中一样,不要与框架作斗争,要服从它。
其实也有可能,我刚刚也遇到过同样的情况。我有两个不同但相关的协议。在某些情况下,我需要通过委托来实现这两个属性,而在其他情况下,只需要一个属性,并且我不想有两个属性,例如... delegate1、delegate2。
您需要做的是创建另一个继承这两个协议的组合协议:
protocol ChartBoostAdapterDelegate: GADCustomEventInterstitialDelegate, GADCustomEventBannerDelegate { }
class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate {
weak var delegate: ChartBoostAdapterDelegate?
override init(){
}
...
}
Run Code Online (Sandbox Code Playgroud)