无法转换NSMutableDictionary类型的值?预期的参数类型[NSObject:AnyObject]!

时间:2016-06-26 07:35:48

标签: ios google-analytics swift3

我想跳过使用Xcode 8 beta并转换我的代码,但我在这里面临一些问题,我正在使用Google AnalyticsSDK发送事件,这就是我以前在Swift中使用它的方式2.2:

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

但现在我想使用Swift 3,它告诉我:

  

无法将NSMutableDicationary类型的值转换为[NSObject:   强迫中的任何对象。

3 个答案:

答案 0 :(得分:17)

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

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

更新:在Swift 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])

答案 1 :(得分:2)

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

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

答案 2 :(得分: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])
    }