Подтвердить что ты не робот

Проблема с Google Analytics в Swift 2 или 3

У меня проблема с Swift 2 (Swift 3) и Google Analytics.

Это строка с проблемой:

tracker.send(GAIDictionaryBuilder.createScreenView().build())

Xcode скажите мне:

Невозможно вызвать 'send' с помощью списка аргументов типа '(NSMutableDictionary!)'

4b9b3361

Ответ 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]

трекер? Пошлите (сборка)