Проблема с Google Analytics в Swift 2 или 3
У меня проблема с Swift 2 (Swift 3) и Google Analytics.
Это строка с проблемой:
tracker.send(GAIDictionaryBuilder.createScreenView().build())
Xcode скажите мне:
Невозможно вызвать 'send' с помощью списка аргументов типа '(NSMutableDictionary!)'
Ответы
Ответ 1
Обновление для Swift 3 (2016.10.19)
let tracker = GAI.sharedInstance().defaultTracker
let build = (GAIDictionaryBuilder.createScreenView().build() as NSDictionary) as! [AnyHashable: Any]
tracker?.send(build)
Все еще уродливый подход, дайте мне знать, если есть более чистое преобразование.
Оригинал
То же самое здесь, пытаясь решить множество ошибок.
Что я сделал (устарел):
var build = GAIDictionaryBuilder.createAppView().build() as [NSObject : AnyObject]
tracker.send(build)
Изменить (2015)
Благодаря @George Poulos., Недавно они обновили параметры, теперь createAppView устарел, вместо этого следует использовать createScreenView.
var build = GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]
tracker.send(build)
Ответ 2
В дополнение к принятому ответу:
Изменено:
tracker.send(GAIDictionaryBuilder.createEventWithCategory("UX", action: "User sign in", label: nil, value: nil).build())
Для этого:
tracker.send(GAIDictionaryBuilder.createEventWithCategory("UX", action: "User sign in", label: nil, value: nil).build() as [NSObject : AnyObject])
Ответ 3
Это может быть немного излишним, но я предпочитаю создавать короткое расширение и не нужно вводить листы каждый раз:
В любом быстром файле вставьте следующий код:
extension GAIDictionaryBuilder
{
func buildSwiftCompatible() -> [NSObject:AnyObject]
{
return self.build() as [NSObject:AnyObject]
}
}
Затем вы можете вызвать buildSwiftCompatible() вместо обычной сборки():
tracker.send(GAIDictionaryBuilder.createScreenView().buildSwiftCompatible())
Удачи.
Ответ 4
Это решение, которое я придумал. Возможно, это может помочь некоторым из вас. Это структура, которую необходимо создать в каждом UIViewController, но она помогает с шаблоном.
import UIKit
struct Analytics {
fileprivate let viewController: UIViewController
fileprivate let tracker = GAI.sharedInstance().defaultTracker
init (forScreen viewController: UIViewController) {
self.viewController = viewController
}
func startTracking () {
let screenView = GAIDictionaryBuilder.createScreenView().build() as NSDictionary
guard
let tracker = tracker,
let build = screenView as? [AnyHashable: Any]
else { return }
tracker.set(kGAIScreenName, value: String(describing: viewController))
tracker.send(build)
}
}
class HomeViewController: UIViewController {
lazy var analytics: Analytics = {
return Analytics(forScreen: self)
}()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear() {
super.viewWillAppear()
analytics.startTracking()
}
}
Ответ 5
Для быстрого 3:
let build: NSObject = GAIDictionaryBuilder.createScreenView(). build()
tracker?.send(build as! [AnyHashable: Any])
Ответ 6
let build = GAIDictionaryBuilder.createScreenView(). build() как [NSObject: AnyObject]
трекер? Пошлите (сборка)