簡體   English   中英

在 Swift 中使用 GTM v5 TAGCustomFunction

[英]Using GTM v5 TAGCustomFunction in Swift

我正在 Swift 項目中集成 GTM v5 (GTM + Firebase),我希望能夠在觸發標簽時調用一些方法。 然而,它似乎不適用於 Swift,盡管 Objective C 和 Android 項目中的類似實現確實有效。

這是符合TAGCustomFunction協議的類:

import Foundation
import GoogleTagManager

final class Tags: NSObject, TAGCustomFunction {

    func execute(withParameters parameters: [AnyHashable : Any]!) -> NSObject! {
        print("YEAH ! IT WORKS !")
        return nil
    }
}

一切都運行良好,即使我看到這些日志:

GoogleTagManager 信息:處理記錄的事件:applicationStart 參數:(空)

但是我正在打印的日志沒有顯示......

我確定容器的配置,因為這個容器已正確加載,並且我為我的 Objective C 項目使用了完全相同的容器,它可以完美地工作。

我認為TAGCustomFunction需要有類/方法@objc批注類級別@objc注釋需要指定類名,即

import Foundation
import GoogleTagManager

@objc(Tags)
final class Tags: NSObject, TAGCustomFunction {

    @objc func execute(withParameters parameters: [AnyHashable : Any]!) -> NSObject! {
        print("YEAH ! IT WORKS !")
        return nil
    }
}

讀完這篇 SO post 后,我突然想起一個 Swift 項目可以嵌入一些客觀的 C 類。 一旦我意識到這一點,我的問題的解決方案就非常容易設置,即使我以前從未這樣做過。

我創建了一個新的Cocoa Touch Class ,如下所示:

  • 這是 .m :

     #import "MyCustomTagClass.h" #import "MySwiftClass-Swift.h" @implementation MyCustomTagClass - (NSObject*)executeWithParameters:(NSDictionary*)parameters { [MySwiftClass myMethod]; } @end
  • 這是 .h :

     #import <Foundation/Foundation.h> #import <GoogleTagManager/TAGCustomFunction.h> @interface MyCustomTagClass : NSObject <TAGCustomFunction> - (NSObject*)executeWithParameters:(NSDictionary*)parameters; @end

請注意,我為我的 Swift 類導入了一個標頭,它是由 Xcode 自動生成的。 只需在類名后添加-Swift.h即可導入它,就像我在上面的 .m 示例中所做的那樣。 最后但並非最不重要的是,在類和方法聲明行使用@objc注釋更新您的 Swift 類:

import Foundation

@objc class MySwiftClass: NSObject {

   //...

   @objc static func myMethod() {
        // do something...
    }
}

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM