Swift:关于协议和委托模式

时间:2016-06-16 00:49:14

标签: ios objective-c swift design-patterns delegates

我想问一下协议和委托模式在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.
}

}

对于上面的代码,我知道方法和属性的协议蓝图采用类或结构或枚举。协议中定义的方法或属性应在相关代表采用的类上实现。

我想问一下这个问题:确定从委托“GADInsterstitialDelegate”继承的名为“interstitialDidDismissScreen”的方法,但是如何通过按插页式广告的关闭按钮来处理该方法。 Google的工程师实施的地方以及他们如何成功实施此行为。谢谢你的帮助。

好黑客,

2 个答案:

答案 0 :(得分:1)

你的问题的措辞是乱码,很难弄明白。

协议基本上是一份合同。它表示符合协议的objets承诺提供属性,并响应协议定义的方法。

当你说

someObject.delegate = self

您正在将指向自己的指针传递给另一个对象。这就像给某人一个电话号码并说'#34;请为我办这些差事。如果您有任何疑问,请拨打此号码给我打电话。也可以在差事完成后给我打电话。"

由于另一个对象知道它的委托符合特定协议,它知道它可以通过电话发送什么消息(它可以发送给代表的消息)

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

interstitial对象需要向其委托发送消息时,它会调用这些方法。

答案 1 :(得分:1)

按钮处理发生在GADInterstitial类中。当他们设置课程时,他们可能有一些处理所有广告互动的内部方法,然后使用委托方法将他们发送回您班级的信息发送给您的用户,以便管理您的用户界面。通过实现委托及其方法,您已经说过我想要使用您的类所做的事情,然后我还要处理该类的所有反馈。如果您要创建自己的类并实现协议和委托,您可以在课堂上做任何您想做的事情,然后将一小部分信息传回给班级代表。一个例子是条形码阅读课程。我不在乎如何读取条形码,我只想知道代码,所以我可以将我的调用类设置为条形码读取类的委托,当条形码被读取时,我会收到条形码回到内部条形码委托方法。