У меня проблема с Свифт 2 (Свифт 3) и Google аналитика.
Это линия с проблемой:
tracker.send(GAIDictionaryBuilder.createScreenView().build())
В Xcode сказать's меня:
не может ссылаться на 'отправить' со списком аргументов типа '(NSMutableDictionary!)'
Обновление для Свифт 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)
Спасибо @Джордж Poulos. . Недавно они обновили нужным, теперь createAppView является устаревшим, вместо того, чтобы использовать createScreenView.
var build = GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]
tracker.send(build)
В дополнение к принятой ответ:
Изменил это:
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])
Это может быть немного перебор, но я предпочитаю создавать короткое расширение и не нужно набирать отливок в любое время:
В любом Свифт файл, вставьте следующий код:
extension GAIDictionaryBuilder
{
func buildSwiftCompatible() -> [NSObject:AnyObject]
{
return self.build() as [NSObject:AnyObject]
}
}
Затем вы можете позвонить buildSwiftCompatible() вместо обычного построения():
tracker.send(GAIDictionaryBuilder.createScreenView().buildSwiftCompatible())
Получайте удовольствие.
Это решение, которое я придумал.. может это поможет некоторым из вас. Это'ы структуру нужно создать в каждой для 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()
}
}
Для Swift 3:
давайте строить:NSObject = GAIDictionaryBuilder.createScreenView().построить()
трекер?.отправить(сборка как! [AnyHashable: Любая])
давайте строить = GAIDictionaryBuilder.createScreenView().построить() как [NSObject : какой-либо объект]
трекер?.отправка(сборка)