我正在将GTMv5(GTM + Firebase)集成到Swift项目中,并且希望能够在触发标签时调用某些方法,但是它似乎不适用于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信息:处理记录的事件:application以参数开头:(空)

但是我正在打印的日志一直没有显示...

我可以确定容器的配置,因为该容器已正确加载,并且我为我的Objective C项目使用了完全相同的容器,效果很好。

最佳答案

阅读this SO post之后,我突然想起一个Swift项目可以嵌入一些 objective-c 类。
一旦意识到这一点,就可以很容易地设置我的问题的解决方案,尽管我以前从未做过。

我创建了一个新的可可接触类,如下所示:

  • 这是.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自动生成。就像在上面的.m示例中所做的那样,只需在类名后添加-Swift.h即可将其导入。
    最后但并非最不重要的一点是,在类和方法声明行使用 @objc 批注更新您的Swift类:
    import Foundation
    
    @objc class MySwiftClass: NSObject {
    
       //...
    
       @objc static func myMethod() {
            // do something...
        }
    }
    

    希望对您有所帮助!

    关于ios - 在Swift中使用GTM v5 TAGCustomFunction,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41938637/

    10-16 22:12