2017-01-30 9 views
1

SwiftプロジェクトでGTMv5(GTM + Firebase)を統合しています。タグがトリガーされたときにいくつかのメソッドを呼び出せるようにしたいと思いますが、Swift、私はそれが似たようなObjective CとAndroidプロジェクトで動作させることができるからです。ここで SwiftでGTM v5 TAGCustomFunctionを使用する

クラスは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プロジェクトには全く同じコンテナを使用しています。これは完全に機能します。

答えて

2

this SO postを読んだ後、私は突然、Swiftプロジェクトがいくつかの客観的な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 
    

私はXcodeによって自動的に生成される私のSwiftクラスのヘッダをインポートすることに注意してください。上記の.mの例のように、インポートするクラス名の後に-Swift.hを追加してください。 最後に、ではなく、少なくとも、クラスやメソッドの宣言ラインで @objc注釈を使用してスウィフトクラスを更新します。

import Foundation 

@objc class MySwiftClass: NSObject { 

    //... 

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

私はこれが助けを願って!

0

は私がすなわち

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; 
    } 
} 
TAGCustomFunctionはクラス/メソッド @objc注釈、 @objc注釈がクラス名を指定する必要がクラスレベルを持つことが必要だと思います
関連する問題