无法转换类型NSMutableDictionary的值?到期望的参数类型[NSObject:AnyObject]!
问题描述:
我想跳过使用Xcode 8测试版并转换我的代码,但我在这里遇到了一些问题,我使用Google AnalyticsSDK发送事件,这就是我在Swift 2.2中使用它的方式:无法转换类型NSMutableDictionary的值?到期望的参数类型[NSObject:AnyObject]!
let tracker = GAI.sharedInstance().defaultTracker
tracker?.set(kGAIScreenName, value: "ViewController")
let builder = GAIDictionaryBuilder.createScreenView()
tracker?.send(builder?.build() as [NSObject:AnyObject])
但现在我想用斯威夫特3,它告诉我:
无法将类型NSMutableDicationary的值输入[NSObject的: AnyObject在胁迫。
答
您需要制作一个变量来保存您的NSMutableDictionary
,然后将其传递给send()
方法。
let dictionary = (builder?.build())! as NSMutableDictionary
tracker?.send(dictionary as [NSObject: AnyObject]!)
UPDATE:另一块干净的方式斯威夫特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])
答
使用我认为这将解决这一问题。在直接使用之前拆开可选件总是好的,否则你可能会后悔。
if let tracker = GAI.sharedInstance().defaultTracker, builder = GAIDictionaryBuilder.createScreenView()
{
if let dict = builder.build(), mutableDict = dict as [NSObject: AnyObject]?
{
tracker.send(mutableDict)
}
}
答
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])
}
或:跟踪器。发送(((?建立呃?.build())!作为NSMutableDictionary)为[NSObject:AnyObject]!) –
Lifesaver!谢谢! – LinusGeffarth