簡體   English   中英

Swift:關於協議和委托模式

[英]Swift: About Protocols and Delegation pattern

我想問一下協議和委托模式在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工程師在哪里實施以及他們如何成功實現這種行為。 謝謝你的幫助。

好駭客,

您的問題的措詞是亂碼,很難弄清楚。

協議基本上是合同。 它說符合協議的對象承諾提供屬性,並響應協議定義的方法。

當你說

someObject.delegate = self

您正在將指向自己的指針傳遞給另一個對象。 這就像給某人您的電話號碼並說:“請幫我辦這些事。如有任何疑問,請用這個號碼給我打電話。也請在辦事完成后給我打電話。”

由於另一個對象知道其委托符合特定協議,因此它知道可以通過電話發送哪些消息(可以向委托發送什么消息)

我懷疑方法interstitialDidReceiveAd(ad: GADInterstitial!)interstitialDidDismissScreen(ad: GADInterstitial!)是委托方法。

interstitial對象需要向其委托發送消息時,它將調用這些方法。

按鈕處理在GADInterstitial類內部進行。 當他們設置類時,他們可能會有一些內部方法來處理所有廣告交互,然后使用委托方法將您需要知道的信息發送回您的類,以保持用戶界面的受控性。 通過實現委托及其方法,您已經說過我想使用您的類所做的事情,然后還要處理該類的所有反饋。 如果您要創建自己的類並實現協議和委托,則可以在類中做任何您想做的事情,然后將一小部分信息傳回給類的委托。 一個示例是條形碼讀取類。 我不在乎條形碼的讀取方式,我只想知道代碼,因此我可以將我的調用類設置為條形碼讀取類的委托,並且當讀取條形碼時,我會在條形碼委托方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM