Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 添加分析事件以记录每个ViewController';项目中有谁的名字_Ios_Swift_Design Patterns - Fatal编程技术网

Ios 添加分析事件以记录每个ViewController';项目中有谁的名字

Ios 添加分析事件以记录每个ViewController';项目中有谁的名字,ios,swift,design-patterns,Ios,Swift,Design Patterns,我有一个项目,每当任何视图控制器(记录视图控制器的名称)出现在屏幕上时,我都需要记录分析事件 我试图避免在调用analytics SDK时将所有现有的视图控制器类都弄乱 我尝试创建一个AnalyticsViewController,我的所有视图控制器都将子类化此视图控制器,然后我在AnalyticsViewController类的viewDidLoad方法中添加analytics事件。但这种方法的问题在于AnalyticsViewController不知道调用来自哪个子视图控制器 我正在使用Sw

我有一个项目,每当任何视图控制器(记录视图控制器的名称)出现在屏幕上时,我都需要记录分析事件

我试图避免在调用analytics SDK时将所有现有的视图控制器类都弄乱

我尝试创建一个AnalyticsViewController,我的所有视图控制器都将子类化此视图控制器,然后我在AnalyticsViewController类的viewDidLoad方法中添加analytics事件。但这种方法的问题在于AnalyticsViewController不知道调用来自哪个子视图控制器

我正在使用Swift 3.0。我相信Swift以其强大的语言特性应该能够为我提供某种抽象


有没有办法在不乱扔所有视图控制器的情况下解决此问题?

您的思路是正确的。制作UIViewController父类是一个好主意

在viewDidLoad方法中,您可以添加以下内容:

let className = NSStringFromClass(self.classForCoder)
它将为您提供当前加载的视图控制器的名称,然后您可以在事件中使用该名称来指定实际加载的视图控制器

编辑:添加了示例。 因此,您父母的viewDidLoad将如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

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

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

在viewDidLoad方法中,您可以添加以下内容:

let className = NSStringFromClass(self.classForCoder)
它将为您提供当前加载的视图控制器的名称,然后您可以在事件中使用该名称来指定实际加载的视图控制器

编辑:添加了示例。 因此,您父母的viewDidLoad将如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

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

@JPetric给出的答案是一个惊人的起点。我只是做了一点修改,让它工作

我把它放在我的AnalyticsViewController中,以检索当前子类的名称

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

@JPetric给出的答案是一个惊人的起点。我只是做了一点修改,让它工作

我把它放在我的AnalyticsViewController中,以检索当前子类的名称

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