Невозможно преобразовать значение типа NSMutableDictionary? к ожидаемому типу аргументов [NSObject: AnyObject]!

Я хотел перепрыгнуть, чтобы использовать Xcode 8 beta и конвертировать мой код, но я столкнулся с какой-то проблемой здесь, я использую SDK Google Analytics для отправки событий, и именно так я использовал его в 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: AnyObject] в принуждении.

Ответ 1

Вам нужно сделать переменную для хранения 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])

Ответ 2

Я думаю, что это решит проблему. Всегда полезно разворачивать опционы, прежде чем использовать их напрямую, иначе вы можете пожалеть позже.

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

Ответ 3

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