Swift - 预处理宏和类声明

5

我正在跟随一份教程学习如何使用相同的代码库构建免费和付费版本的应用程序。

它展示了如何为“FREE”设置DEFINE,我已经成功地完成了所有这些工作。但似乎忽略了如何处理此类定义。对于免费应用程序,它需要成为GADBannerViewDelegate、GADInterstitialDelegate的委托,而付费版本则不需要。

因此,我希望设置类似于以下内容:

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

但这是无效的,我阅读了文档后明白了原因。我不理解的是如何处理这个问题。作为一种解决方法,我想到了让付费版本也具有那些GoogleAd代理。但是,苹果拒绝了我的应用程序,因为包含它会让我的应用程序看起来像是提供广告,而实际上并不是,这违反了规定。
因此,目前每当我构建付费和免费应用程序时,我都手动编辑代码以更改声明。这样做虽然有效,但很麻烦。肯定有自动化的方法,对吧?
1个回答

5

你可以使用extension来实现协议:

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

将扩展名放在一个不同的文件中,并且只由“free”目标引用。 - Aderstedt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接