我正在尝试保存代码并重构。
在我的项目中,我在多个 UIViewController
中使用以下 adMobBanner
扩展。
整个扩展是可重用的,我只需要更改 ViewController 的名称:
extension MyVC: GADInterstitialDelegate {
但是由于我在多个类中使用它,因此这些类的长度不必要地超出。
有某种方法可以重用该扩展吗?像这样的东西:
func myExtension(vc: UIViewController) {
extension vc: GADInterstitialDelegate {
....
}
}
由myExtension(MyViewController)调用
我知道这段代码是无稽之谈,但它提供了我想要转置的想法。有这样的事吗?或者,保存重复代码的扩展代码行的另一种选择是什么?非常感谢您的帮助。
我的扩展:
extension MyViewController: GADInterstitialDelegate {
// MARK: - Setup Ads
func setupAds() {
// Setup our interstitial ad initially
interstitial.delegate = self
interstitial.load(GADRequest())
}
// MARK: - Load Interstitial Ad
func loadFullScreenAd() {
// GADInterstitial's are single use. You have to create a new GADInterstitial for each presentation
// So, if you'd like to show more than one GADInterstitial in your apps session we need this
// This func will be used to create a new GADInterstitial after one has been displayed and dismissed
interstitial = GADInterstitial(adUnitID: getAdmobInterstitial())
interstitial.delegate = self
interstitial.load(GADRequest())
}
// MARK: - Show Interstitial Ad
func showFullScreenAd() {
// Call this function when you want to present the interstitial ad
// ie. game over, transition to another vc, etc...
// Make sure you give atleast a few seconds for this ad to load before atempting to present it
// For example, don't try to present this ad in viewDidAppear
// Check if the interstitial ad is loaded before trying to present it
if self.interstitial.isReady {
self.interstitial.present(fromRootViewController: self)
}
}
// MARK: - GADInterstitial Delegate Methods
func interstitialDidReceiveAd(_ ad: GADInterstitial!) {
print("interstitialDidReceiveAd")
showFullScreenAd()
}
func interstitialWillPresentScreen(_ ad: GADInterstitial!) {
print("interstitialWillPresentScreen")
// If you needed to pause anything in your app this would be the place to do it
// ie. sounds, game state, etc...
}
func interstitialDidDismissScreen(_ ad: GADInterstitial!) {
print("interstitialDidDismissScreen")
// The GADInterstitial has been shown and dismissed by the user
// Lets load another one for the next time we want to show a GADInterstitial
//loadFullScreenAd()
// If you paused anything in the interstitialWillPresentScreen delegate method this is where you would resume it
}
func interstitial(_ ad: GADInterstitial!, didFailToReceiveAdWithError error: GADRequestError!) {
print("interstitial didFailToReceiveAdWithError: \(error)")
}
}
最佳答案
到目前为止对我有用的是创建一个自己的文件,名为“关于类扩展内容的名称
,然后我将该文件放入名为Extensions的组文件夹中
。所以在你的情况下,我会这样调用该文件:
GADInterstitialDelegate-UIViewControllerExtension.swift
里面的代码是这样的:
extension UIViewController: GADInterstitialDelegate {
// your reusable code
}
这只是我的方法,我认为还有其他好的方法
关于ios - Swift 3/如何重用扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40196433/