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