【问题标题】:Cannot convert value of type NSMutableDictionary? to expected argument type [NSObject: AnyObject]!无法转换 NSMutableDictionary 类型的值?到预期的参数类型 [NSObject: AnyObject]!
【发布时间】:2016-10-28 10:06:16
【问题描述】:

我想跳过去使用 Xcode 8 测试版并转换我的代码,但我在这里遇到了一些问题,我正在使用 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,它告诉我:

无法将 NSMutableDicationary 类型的值转换为 [NSObject 类型: AnyObject] 在强制中。

【问题讨论】:

    标签: ios google-analytics swift3


    【解决方案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])
    

    【讨论】:

    • 或者:tracker?.send(((builder?.build())! as NSMutableDictionary) 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])
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-06
        • 2016-10-04
        • 1970-01-01
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多