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

Cannot convert value of type NSMutableDictionary? to expected argument type [NSObject: AnyObject]!

我想跳过去使用 Xcode 8 beta 并转换我的代码,但我在这里遇到了某种问题,我正在使用 Google Analytics SDK 发送事件,并且这就是我在 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,它告诉我:

Cannot convert value of type NSMutableDicationary to type [NSObject : AnyObject] in coercion.

您需要创建一个变量来保存您的 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])

我认为这会解决问题。在直接使用可选值之前解包总是好的,否则你以后可能会后悔。

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

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])
    }