[英]Protocols and delegation in swift 3 not sending values between viewcontrollers
[英]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.