动态打印类和功能

时间:2015-05-14 02:14:39

标签: ios swift

我是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不接受任何输入参数。此外,不是显式定义类名,而是动态获取函数所在类的名称。

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

2 个答案:

答案 0 :(得分:0)

我的建议是您在扩展程序中执行此操作。扩展可能是Swift,恕我直言的亮点。您基本上可以装饰方法,不仅包括您自己的类,还包括其他类,包括框架类。想知道viewDidLoad何时调用了你的超类?只需创建一个扩展程序,然后观察控制台中显示的消息。

其他优点:

  • 代码不会弄乱主类及其逻辑(无论是什么)
  • 您可以在测试文件中定义扩展名,以便在运行测试时自动存在,而不是在运行时

Swift Cocoa代码是以真正具有创造性的方式构建的扩展,显示了方面的一些智能,而且是目标C的分类组织。当你结合扩展和协议时,你有特征。

答案 1 :(得分:0)

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

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