Search code examples
objective-cswiftpointersviewcontrollerscene

How to use pointer from other classes in swift


I'm immigrating my old ObjectiveC code to swift. In ObjcC had a separate class to handle my Admob activity. In this class I've created a pointer in the init func, and when changing scene, I could use this pointer to change the location of the ads banner.

       @implementation MyAdsSupport

    +(id)ShowAds:(My_Ads_Position)posIndex
    {
        if (_adsBannerPointer == nil)
        {
            _adsBannerPointer = [[KTFAdsSupport alloc]initAds:posIndex];
        }
        else
        {
            [_adsBannerPointer setAdsPosition:posIndex];
        }
        return _adsBannerPointer;
    }

In Swift I created the Admob class, and managed to present ads on screen but when I try to call the pointer from another class it returns always nil. Here is my Swift Code:

   var adsPointer: My_Ads_Support!

func initAds(myView: UIViewController, atPos: My_Ads_Position) -> KTF_Ads_Support {


    if adsPointer == nil {
        adsPointer = self
        adsPointer.ShowAds(myView: myView, atPos: atPos)
    }
    else
    {
        print("adsPointer ALIVE")
        adsPointer.setAdsPos( atPos: atPos)
    }
    return self.adsPointer!
}

How can I set a pointer in Swift to be able to reach the ads banner from any scene?


Solution

  • In your Objective-C code you have three methods, the instance methods initAds: and setAdsPosition:, and the class method ShowAds:. The latter uses a variable, presumably declared static, called _adsBannerPointer.

    Your Swift code is not the same. It has two methods, the instance methods initAds and setAdsPos, and one variable, the instance variable adsPointer.

    In Swift class methods are termed type methods (as they can belong to classes, structs and enumerations) and are indicated by the use of the keyword static, type (class) variables are also indicated with static. So to follow your Objective-C model you need something along the lines of:

    static var adsPointer: My_Ads_Support!
    
    // instance init
    init(startingPos : My_Ads_Position) { ... }
    
    // instance set position
    fun setAdsPos(atPos : My_Ads_Position) { ... }
    
    static func showAds(myView: UIViewController, atPos: My_Ads_Position) -> KTF_Ads_Support { ... }
    

    HTH