我想问一下协议和委托模式在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的工程师实施的地方以及他们如何成功实施此行为。谢谢你的帮助。
好黑客,
答案 0 :(得分:1)
你的问题的措辞是乱码,很难弄明白。
协议基本上是一份合同。它表示符合协议的objets承诺提供属性,并响应协议定义的方法。
当你说
时someObject.delegate = self
您正在将指向自己的指针传递给另一个对象。这就像给某人一个电话号码并说'#34;请为我办这些差事。如果您有任何疑问,请拨打此号码给我打电话。也可以在差事完成后给我打电话。"
由于另一个对象知道它的委托符合特定协议,它知道它可以通过电话发送什么消息(它可以发送给代表的消息)
我怀疑方法interstitialDidReceiveAd(ad: GADInterstitial!)
和interstitialDidDismissScreen(ad: GADInterstitial!)
是委托方法。
当interstitial
对象需要向其委托发送消息时,它会调用这些方法。
答案 1 :(得分:1)
按钮处理发生在GADInterstitial
类中。当他们设置课程时,他们可能有一些处理所有广告互动的内部方法,然后使用委托方法将他们发送回您班级的信息发送给您的用户,以便管理您的用户界面。通过实现委托及其方法,您已经说过我想要使用您的类所做的事情,然后我还要处理该类的所有反馈。如果您要创建自己的类并实现协议和委托,您可以在课堂上做任何您想做的事情,然后将一小部分信息传回给班级代表。一个例子是条形码阅读课程。我不在乎如何读取条形码,我只想知道代码,所以我可以将我的调用类设置为条形码读取类的委托,当条形码被读取时,我会收到条形码回到内部条形码委托方法。