我想問一下在Swift中協議和委託模式是如何工作的。Swift:關於協議和委託模式
我有一個應用程序,讓我試試在iOS平臺上的谷歌廣告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.
}
}
對於上面的代碼中,我意識到的方法和屬性的協議藍圖採用類或結構或枚舉。協議中定義的方法或屬性應該在相關代表採用的類上實現。
我想問一下,cofused point:OK從代理「GADInsterstitialDelegate」繼承的名爲「interstitialDidDismissScreen」的方法,但是如何通過按插頁式廣告的關閉按鈕處理該方法。谷歌的工程師們在哪裏實施,他們如何成功實現這一行爲。謝謝你的幫助。
良好的黑客,
OMG!這個答案更加明智,開放和可信。你的條形碼例子非常好。感謝您寶貴的答覆!我完全理解,我錯過了什麼,什麼是重點!我認爲這個想法保持了我們的對象或類別抽象。我認爲抽象的好模式。那麼確切的說,AdMob SDK的代碼是封閉的嗎?我們看不到班上有什麼。它只是給我們一個端點並使用輸出。完善。非常感謝你。 –