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

Ios 从NSMutableDictionary强制转换?对于不相关的类型[AnyHashble:Any]总是失败,ios,swift,xcode,google-analytics,swift3,Ios,Swift,Xcode,Google Analytics,Swift3,我更新到Swift 3,在我的项目中使用谷歌分析。最初,我使用了这行代码: tracker.send(GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]) Swift 3转换工具完成后,将其更改为: tracker?.send(GAIDictionaryBuilder.createScreenView().build() as [AnyHashable: Any]) 我得到了一个错误: Cann

我更新到Swift 3,在我的项目中使用谷歌分析。最初,我使用了这行代码:

 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中的一个bug吗?

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

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

tracker?.send(GAIDictionaryBuilder.createScreenView().build() as NSDictionary as! [AnyHashable : Any])
我用这个(更安全的)方法解决了这个问题:

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