【发布时间】:2016-06-16 00:49:14
【问题描述】:
我想问一下协议和委托模式在 Swift 中是如何工作的。
我有一个应用程序可以让我在 iOS 平台上试用 google ad sdk。但我遗漏了一些东西,并对这些方法的工作原理感到困惑。
我有一些这样的代码;
import UIKit
import GoogleMobileAds
class ViewController: UIViewController, GADInterstitialDelegate {
@IBOutlet weak var bannerView: GADBannerView!
let request = GADRequest()
var interstitial: GADInterstitial!
@IBOutlet weak var mylbl: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
bannerView.adUnitID = "xxx"
bannerView.rootViewController = self
bannerView.loadRequest(self.request)
interstitial = createAndLoadInterstitial()
}
func createAndLoadInterstitial() -> GADInterstitial {
let interstitial = GADInterstitial(adUnitID: "xxx")
interstitial.delegate = self
interstitial.loadRequest(self.request)
return interstitial
}
func interstitialDidDismissScreen(ad: GADInterstitial!) {
interstitial = createAndLoadInterstitial()
mylbl.text = "No ad"
}
func interstitialDidReceiveAd(ad: GADInterstitial!) {
mylbl.text = "received ad"
}
@IBAction func touched(sender: AnyObject) {
if interstitial.isReady
{
interstitial.presentFromRootViewController(self)
}
else
{
mylbl.text = "Not Ready!"
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
对于上面的代码,我知道采用类或结构或枚举的方法和属性的协议蓝图。协议中定义的方法或属性应在相关委托采用的类上实现。
我想问这个问题和困惑点:好的,从委托“GADInsterstitialDelegate”继承的名为“interstitialDidDismissScreen”的方法,但是如何通过按下插页式广告的关闭按钮来处理该方法。 Google 的工程师在哪里实施以及他们如何成功实现这种行为。感谢您的帮助。
好技巧,
【问题讨论】:
标签: ios objective-c swift design-patterns delegates