如何在Swift中使用相同协议variables的多个协议?
在swift中我实现了两个协议, GADCustomEventInterstitial
和GADCustomEventBanner
。
这两个协议都需要一个名为delegate
的属性。 delegate
在每个协议中是不同的types,因此会产生冲突。
class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate{ var delegate:GADCustomEventInterstitialDelegate?; // Name conflict var delegate:GADCustomEventBannerDelegate?; // Name conflict override init(){ } ... }
简单的答案是你不能。
也许一个协议依赖于另一个协议,在这种情况下,您可以使用相关协议来处理委托types。
他们是图书馆/框架,这不是我的定义
那么显然你不能让同一个class级采用这两个协议。 但是你并不需要。 只要把这个function分成两个不同的类,这些协议的devise者显然是想要的。 你应该有一个类,采用GADCustomEventInterstitial并有它的 delegate
, 另一个类采用GADCustomEventBanner
并有它的 delegate
。 你有什么理由试图迫使他们成为同一个class级? 就像所有你正在使用框架的东西一样,不要打架 ,要服从它。
其实是可能的,我只是遇到了同样的情况。 我有两种不同的但有关的协议。 在某些情况下,我需要通过委托实现,而在其他情况下,只有一个,我不想有两个属性,例如…委托1,委托2。
你需要做的是创build另一个从两个协议inheritance的组合协议:
protocol ChartBoostAdapterDelegate: GADCustomEventInterstitialDelegate, GADCustomEventBannerDelegate { } class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate { weak var delegate: ChartBoostAdapterDelegate? override init(){ } ... }