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

时间:2015-04-12 03:19:08

标签: ios swift protocols

在swift中,我正在实施两个协议GADCustomEventInterstitialGADCustomEventBanner

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

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

        }
    ...

    }

3 个答案:

答案 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(){

    }
    ...

}