Google Analytics 在 Swift 2 或 3 中的问题
Issue with Google Analytics in Swift 2 or 3
我对 Swift 2 (Swift 3) 和 Google Analytics 有疑问。
这是有问题的行:
tracker.send(GAIDictionaryBuilder.createScreenView().build())
Xcode 告诉我:
Cannot invoke 'send' with an argument list of type '(NSMutableDictionary!)'
更新 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)
除了已接受的答案:
更改为:
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])
这可能有点矫枉过正,但我更喜欢创建一个简短的扩展,而不需要每次都输入铸件:
在任何 swift 文件中,粘贴以下代码:
extension GAIDictionaryBuilder
{
func buildSwiftCompatible() -> [NSObject:AnyObject]
{
return self.build() as [NSObject:AnyObject]
}
}
然后你可以调用 buildSwiftCompatible() 而不是通常的 build():
tracker.send(GAIDictionaryBuilder.createScreenView().buildSwiftCompatible())
玩得开心。
let build = GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]
tracker?.send(构建)
对于swift 3:
让build:NSObject = GAIDictionaryBuilder.createScreenView().build()
tracker?.send(构建为![AnyHashable: Any])
这是我想出的解决方案..也许它可以帮助你们中的一些人。这是一个您需要在每个 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 2 (Swift 3) 和 Google Analytics 有疑问。
这是有问题的行:
tracker.send(GAIDictionaryBuilder.createScreenView().build())
Xcode 告诉我:
Cannot invoke 'send' with an argument list of type '(NSMutableDictionary!)'
更新 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)
除了已接受的答案:
更改为:
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])
这可能有点矫枉过正,但我更喜欢创建一个简短的扩展,而不需要每次都输入铸件:
在任何 swift 文件中,粘贴以下代码:
extension GAIDictionaryBuilder
{
func buildSwiftCompatible() -> [NSObject:AnyObject]
{
return self.build() as [NSObject:AnyObject]
}
}
然后你可以调用 buildSwiftCompatible() 而不是通常的 build():
tracker.send(GAIDictionaryBuilder.createScreenView().buildSwiftCompatible())
玩得开心。
let build = GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]
tracker?.send(构建)
对于swift 3:
让build:NSObject = GAIDictionaryBuilder.createScreenView().build()
tracker?.send(构建为![AnyHashable: Any])
这是我想出的解决方案..也许它可以帮助你们中的一些人。这是一个您需要在每个 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()
}
}