Ios 类和函数的动态打印

Ios 类和函数的动态打印,ios,swift,Ios,Swift,我是xcode的初学者,希望动态打印正在执行的函数 所以我想要一个函数,可以显示如下内容 functionExecuted() executed in ClassName 这将动态地获取函数名和类名。 我已经有类似的东西了: class MyViewController: ViewController { func appActivity() { var class: String = "MyViewController" println("\(___F

我是xcode的初学者,希望动态打印正在执行的函数

所以我想要一个函数,可以显示如下内容

functionExecuted() executed in ClassName
这将动态地获取函数名和类名。 我已经有类似的东西了:

class MyViewController: ViewController {
    func appActivity() {
        var class: String = "MyViewController"
        println("\(___FUNCTION___) executed in \(class)")
    }
    override func viewDidLoad() {
        // Etc. code
        appActivity()
    }
}
它将在加载视图时运行appActivity()函数。但这将产生以下结果:

appActivity() executed in MyViewController
当我在寻找:

viewDidLoad() executed in MyViewController
我希望保持appActivity不接受任何输入参数。另外,与其显式定义类名,不如让它动态获取函数所在的类的名称


我知道这可能不是实现这一点的最佳方式,但更多的是关于学习和理解。

我的建议是,您可以在扩展中这样做。扩展可能是Swift的亮点,IMHO。您基本上可以装饰方法,不仅装饰您自己的类,还装饰其他类,包括框架类。想知道viewDidLoad何时被调用为您的超类吗?只需创建一个扩展,并观察控制台中出现的消息

其他优点:

  • 代码没有弄脏主类及其逻辑(不管是什么)
  • 您可以在测试文件中定义扩展名,以便在运行测试时,而不是在运行时,它会自动出现在测试文件中

Swift Cocoa代码以真正创新的方式构建在扩展的基础上,展示了方面的一些智能,同时也展示了Objective C的分类组织。当您将扩展和协议结合在一起时,您就有了特性

我经常用这个。它可以作为顶级函数实现,而且非常小

func Log(_ message: String = "", klass: AnyObject, file: String = __FILE__, function: String = __FUNCTION__) {
    NSLog("%@","\(file.lastPathComponent) \(function) \(klass.self) - \(message)")
}