Swift 我正在尝试在我的应用程序中为admobs创建一个帮助器类

Swift 我正在尝试在我的应用程序中为admobs创建一个帮助器类,swift,swift3,Swift,Swift3,我的应用程序中有一个Admobs ADHelper类。此类的代码为: import UIKit import Firebase import GoogleMobileAds class AdHelper { static let shared = AdHelper() func initAdMobBannerView(inViewController viewController: UIViewController) -> GADBannerVi

我的应用程序中有一个Admobs ADHelper类。此类的代码为:

  import UIKit
   import Firebase
   import GoogleMobileAds

    class AdHelper {
    static let shared = AdHelper()

    func initAdMobBannerView(inViewController viewController: UIViewController) -> GADBannerView {
        var adMobBannerView = GADBannerView()
        if UIDevice.current.userInterfaceIdiom == .phone {
            // iPhone
            adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: 320, height: 50))
            adMobBannerView.frame = CGRect(x: 0, y: viewController.view.frame.size.height, width: 320, height: 50)
        } else  {
            // iPad
            adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: 468, height: 60))
            adMobBannerView.frame = CGRect(x: 0, y: viewController.view.frame.size.height, width: 468, height: 60)
        }
        adMobBannerView.adUnitID = "ca-app-pub-2722404425168911/4464296386"
        adMobBannerView.rootViewController = viewController

        adMobBannerView.delegate = viewController as? GADBannerViewDelegate
        //viewController.addSubview(adMobBannerView)

        let request = GADRequest()
        adMobBannerView.load(request)
        return adMobBannerView
        UIView.beginAnimations("showBanner", context: nil)
        UIView.commitAnimations()
        adMobBannerView.isHidden = false
    }

}
我试图从另一个视图控制器调用该类:

func playAd(){

}

我在viewdidload中将此函数称为playAd()


没有广告还在加载

看看你的类的定义:

class AdHelper: UIViewController
为什么它必须扩展
UIViewController
?它是一个助手类,因此不必扩展
UIViewController

你说:

问题是当我这样做的时候,广告根本没有出现,但是所有这些代码都放在同一个视图控制器中(没有使用共享类),它们会出现

看看您的
initAdMobBanner
方法,例如这一行:

adMobBannerView.frame = CGRect(x: 0, y: view.frame.size.height, width: 320, height: 50)
您正在将
adMobBannerView
frame
设置为从
视图的高度开始。frame
…但问题是,
视图有多大?在哪里草签

后来:

view.addSubview(adMobBannerView)
您正在将您的
adMobBannerView
添加到
视图
,但是
视图的大小是多少

这也解释了:

但是所有这些代码都放在同一个视图控制器中(不使用共享类),它们会显示出来

是的……因为在这里您知道视图的大小,并且可以向其中添加内容

我在这里暗示的是,我认为您应该创建一个独立的类,该类不从
UIViewController
继承,然后使用一个
UIViewController
作为参数的方法来创建一个新的
adMobBannerView

比如:

class AdHelper {
   static let shared = AdHelper()

    func initAdMobBannerView(inViewController viewController: UIViewController) -> GADBannerView {
        var adMobBannerView = GADBannerView() 
        if UIDevice.current.userInterfaceIdiom == .phone {
            // iPhone
            adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: 320, height: 50))
            adMobBannerView.frame = CGRect(x: 0, y: viewController.view.frame.size.height, width: 320, height: 50)
        } else  {
            // iPad
            adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: 468, height: 60))
            adMobBannerView.frame = CGRect(x: 0, y: viewController.view.frame.size.height, width: 468, height: 60)
        }
        adMobBannerView.adUnitID = ADMOB_BANNER_UNIT_ID
        adMobBannerView.rootViewController = viewController

        return adMobBannerView
    }
}
然后可以在普通的ViewController中使用,如下所示:

func playAd() {
    let adMobBannerView = AdHelper.shared.initAdMobBannerView(inViewController: self)
    view.addSubview(adMobBannerView)
    let request = GADRequest()
    adMobBannerView.load(request)
}

希望这有意义。

感谢您及时回复。我尝试了你的代码,但当我尝试在我的普通视图中使用控制器类型“AdHelper”时,得到了这个结果。没有替换成员sharedI让adMobBannerView=AdHelper.shared.initAdMobBannerView(inViewController:self)视图。addSubview(adMobBannerView)让adMobBannerView=AdHelper.sharedHelper.initAdMobBannerView(inViewController:self)addSubview(adMobBannerView),错误消失,但仍然没有出现广告。我还从助手类的定义中删除了UIViewController。你能帮忙吗!啊!!很抱歉我更新了我的答案,并将
sharedHelper
重命名为
shared
谢谢,但问题是当我刚刚使用shared时,我收到一个错误,说Type'AdHelper'没有共享成员。我尝试了更新的代码,现在没有错误,但广告仍然没有显示。你能尽快调查一下这件事并提供帮助吗?
func playAd() {
    let adMobBannerView = AdHelper.shared.initAdMobBannerView(inViewController: self)
    view.addSubview(adMobBannerView)
    let request = GADRequest()
    adMobBannerView.load(request)
}