Swift - 预处理器宏和类声明

时间:2015-09-11 04:03:15

标签: ios swift

所以我正在学习如何使用相同的代码库来构建应用程序的免费版和PAID版的教程。

它展示了如何为“FREE”设置DEFINE,并且我已经完成了所有这些工作。似乎被掩盖的是如何处理这个类定义。对于免费应用程序,它需要是GADBannerViewDelegate,GADInterstitialDelegate的委托,而PAID版本则不是。

所以我希望建立这样的东西:

#if FREE
class GameViewController:    UIViewController, GKGameCenterControllerDelegate,  GADBannerViewDelegate, GADInterstitialDelegate {
#else
class GameViewController:    UIViewController, GKGameCenterControllerDelegate{
#endif

但那是无效的,我在阅读完文档之后就明白了原因。我不明白的是,如何处理这个问题。作为一种解决方法,我认为我只是让PAID版本也有这些GoogleAd代表。但后来苹果公司拒绝了我的应用程序,因为包括这样看起来就像我的应用程序正在提供广告,当它不是,而且这违反了规则。

所以现在,每当我构建PAID vs FREE应用程序时,我只是手动编辑代码来更改声明。它有效,但是很愚蠢。必须有一种自动化方法,对吗?

1 个答案:

答案 0 :(得分:4)

您可以使用extension to implement protocols

class GameViewController: UIViewController, GKGameCenterControllerDelegate {

    #if FREE
    var bannerView: GABannerView!
    var interstitial: GADInterstitial!
    #endif

    override func viewDidLoad() {
        super.viewDidLoad()

        #if FREE
        bannerView = GADBannerView(adSize:kGADAdSizeBanner)
        bannerView.delegate = self

        interstitial = GADInterstitial(adUnitID: "...")
        interstitail.delegate = self

        // ... other FREE stuff
        #endif

        // common stuff
    }
}

#if FREE
extension GameViewController: GADBannerViewDelegate, GADInterstitialDelegate {
    // Ad delegate methods
}
#endif