从NSMutableDictionary转换?不相关的类型[AnyHashble:Any]总是失败

时间:2016-10-06 19:44:02

标签: ios swift xcode google-analytics swift3

我更新了Swift 3,并且我在我的项目中使用Google Analytics。最初我有这行代码工作:

 tracker.send(GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject])

Swift 3转换工具完成后,将其更改为:

tracker?.send(GAIDictionaryBuilder.createScreenView().build() as [AnyHashable: Any])

我收到错误:

Cannot convert value of type NSMutableDictionary! to type [AnyHashable:Any] in coercion

我可以通过将行更改为:

来消除此错误
tracker?.send(GAIDictionaryBuilder.createScreenView().build() as? [AnyHashable: Any])

然而,这给了我标题中的警告。有谁知道为什么会这样?这是Swift 3中的一个错误吗?

2 个答案:

答案 0 :(得分:2)

我不确定Swift Team(或Apple?)是否认为这是一个错误。但事实上,Swift 3运行时可以NSMutableDictionary!类型的值转换为使用[AnyHashable:Any]键入as!

要取消警告,请尝试以下操作:

tracker?.send(GAIDictionaryBuilder.createScreenView().build() as NSDictionary as! [AnyHashable : Any])

答案 1 :(得分:0)

我以这种(更安全)的方式解决了这个问题:

    if let eventTracker = GAIDictionaryBuilder.createScreenView().build() {
        var eventTrackerSwift: [AnyHashable: Any] = [:]
        for item in eventTracker {
            if let key = item.key as? AnyHashable {
                eventTrackerSwift[key] = item.value
            }
        }
        tracker.send(eventTrackerSwift)
    }