繁体   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