Swift 2或3中的Google Analytics问题

时间:2015-04-09 18:49:59

标签: ios swift google-analytics

我遇到了Swift 2(Swift 3)和Google Analytics的问题。

这是问题所在:

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

Xcode告诉我:

  

无法使用类型'(NSMutableDictionary!)'

的参数列表调用'send'

6 个答案:

答案 0 :(得分:64)

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)

答案 1 :(得分:10)

除了接受的答案:

改变了这个:

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])

答案 2 :(得分:5)

这可能有点矫枉过正,但我​​更喜欢创建一个简短的扩展,而不是每次都要输入铸件:

在任何swift文件中,粘贴以下代码:

extension GAIDictionaryBuilder
{
    func buildSwiftCompatible() -> [NSObject:AnyObject]
    {
        return self.build() as [NSObject:AnyObject]
    }
}

然后你可以调用buildSwiftCompatible()而不是通常的build():

tracker.send(GAIDictionaryBuilder.createScreenView().buildSwiftCompatible())

玩得开心。

答案 3 :(得分:0)

这是我提出的解决方案..也许它可以帮助你们中的一些人。它是您需要在每个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()
    }
}

答案 4 :(得分:-1)

对于swift 3:

让build:NSObject = GAIDictionaryBuilder.createScreenView()。build()

tracker?.send(build as![AnyHashable:Any])

答案 5 :(得分:-2)

让build = GAIDictionaryBuilder.createScreenView()。build()为[NSObject:AnyObject]

跟踪器?。发送(生成)