我更新了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中的一个错误吗?
答案 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)
}