2016-06-26 83 views
10

我想跳过使用Xcode 8测试版并转换我的代码,但我在这里遇到了一些问题,我使用Google AnalyticsSDK发送事件,这就是我在Swift 2.2中使用它的方式:无法转换类型NSMutableDictionary的值?到期望的参数类型[NSObject:AnyObject]!

let tracker = GAI.sharedInstance().defaultTracker 
    tracker?.set(kGAIScreenName, value: "ViewController") 
    let builder = GAIDictionaryBuilder.createScreenView() 
    tracker?.send(builder?.build() as [NSObject:AnyObject]) 

但现在我想用斯威夫特3,它告诉我:

无法将类型NSMutableDicationary的值输入[NSObject的: AnyObject在胁迫。

回答

17

您需要制作一个变量来保存您的NSMutableDictionary,然后将其传递给send()方法。

let dictionary = (builder?.build())! as NSMutableDictionary 
tracker?.send(dictionary as [NSObject: AnyObject]!) 

UPDATE:另一块干净的方式斯威夫特3

guard let tracker = GAI.sharedInstance().defaultTracker else { return } 
tracker.set(kGAIScreenName, value: "ViewController") 
guard let builder = GAIDictionaryBuilder.createScreenView() else { 
return } 
tracker.send(builder.build() as [NSObject:AnyObject]) 
+0

或:跟踪器。发送(((?建立呃?.build())!作为NSMutableDictionary)为[NSObject:AnyObject]!) –

+1

Lifesaver!谢谢! – LinusGeffarth

2

使用我认为这将解决这一问题。在直接使用之前拆开可选件总是好的,否则你可能会后悔。

if let tracker = GAI.sharedInstance().defaultTracker, builder = GAIDictionaryBuilder.createScreenView() 
{     
    if let dict = builder.build(), mutableDict = dict as [NSObject: AnyObject]? 
    { 
     tracker.send(mutableDict) 
    } 
} 
0

SWIFT 3

下面代码屏幕跟踪使用

func trackScreen(screenName:String){ 
      let tracker = GAI.sharedInstance().defaultTracker  
      tracker?.set(kGAIScreenName, value: screenName) 
      let builder:NSObject = GAIDictionaryBuilder.createScreenView().build()  
      tracker?.send(builder as! [NSObject:AnyObject]) 
     } 

事件追踪

func eventTracking(){ 
    let tracker = GAI.sharedInstance().defaultTracker 
    let builder:NSObject = GAIDictionaryBuilder.createEvent(
    withCategory:"categoryName", 
    action:"ok button Clicked", 
    label:"button name", 
    value:nil).build() 
    tracker?.send(builder as! [NSObject:AnyObject]) 
    } 
相关问题