Невозможно преобразовать значение типа NSMutableDictionary? к ожидаемому типу аргументов [NSObject: AnyObject]!
Я хотел перепрыгнуть, чтобы использовать Xcode 8 beta и конвертировать мой код, но я столкнулся с какой-то проблемой здесь, я использую SDK Google Analytics для отправки событий, и именно так я использовал его в 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] в принуждении.
Ответы
Ответ 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])
Ответ 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])
}