添加分析事件以记录项目中的每个ViewController的名称

时间:2016-12-15 15:51:11

标签: ios swift design-patterns

我有一个项目,只要屏幕上出现任何View Controller(记录View Controller的名称),我就需要记录分析事件。

我试图通过调用分析SDK来避免乱丢所有现有的View Controller类。

我尝试制作一个AnalyticsViewController,我的所有View控制器都会将此View Controller子类化,然后在AnalyticsViewController类的viewDidLoad方法中添加analytics事件。但是这种方法的问题在于AnalyticsViewController没有来自哪个子视图控制器。

我使用的是Swift 3.0。我相信Swift凭借其强大的语言功能应该能够为我提供一些抽象。

在没有乱丢所有View Controllers的情况下,有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。制作UIViewController父类是个好主意。

在viewDidLoad方法中,您只需添加:

let className = NSStringFromClass(self.classForCoder)

它将为您提供当前加载的视图控制器的名称,然后您可以在事件中使用该名称来指定实际加载的视图控制器。

编辑:添加了示例。 所以你父母的viewDidLoad看起来像这样:

override func viewDidLoad() {
    super.viewDidLoad()

    let className = NSStringFromClass(self.classForCoder)
    sendEvent(withViewControllerName: className)
}

答案 1 :(得分:0)

@JPetric给出的答案是一个了不起的起点。我只需要做一些修改就可以正常工作。

我已将其放在我的AnalyticsViewController中以检索当前子类的名称。

private func currentClassName() -> String? {
        return NSStringFromClass(self.classForCoder).components(separatedBy: ".").last
    }