Swift 单点记录控制器方法
我想记录所有控制器方法调用,包括methodname、methodparams,不想为每个方法写日志。它应该从一点着手。可以用swift编写拦截器方面吗 例如,2016-05-05 09:47:33.927 xxx[58787:27517992]init()方法,使用参数[“xxx”,“yyy”]调用Swift 单点记录控制器方法,swift,logging,Swift,Logging,我想记录所有控制器方法调用,包括methodname、methodparams,不想为每个方法写日志。它应该从一点着手。可以用swift编写拦截器方面吗 例如,2016-05-05 09:47:33.927 xxx[58787:27517992]init()方法,使用参数[“xxx”,“yyy”]调用 谢谢。感谢Swift>=2.2: 您可以尝试执行以下操作: print("\(NSDate()) \(#file) \(#line) \(#function) in \(self.dynamic
谢谢。感谢Swift>=2.2: 您可以尝试执行以下操作:
print("\(NSDate()) \(#file) \(#line) \(#function) in \(self.dynamicType)")
您可以使用如下全局方法:
func VerboseLog<T>(object: T, filename: String = #file, line: Int = #line, funcname: String = #function) {
print("\(NSDate()) \(filename) \(line) \(funcname) in \(object.dynamicType)")
}
日志记录是可以的,但是我如何截获每个方法调用并将其记录在那里,比如AOP中的@Before pointcut。请记住,您也可以使用自定义类对控制器进行子类化,并将此日志添加到ovveride方法中,如viewDidLoad@AlessandroOrnano,这不是OP要求的,在原始问题的第二行中明确提到了这一点。更具体地说,这只是答案的一部分,而不是最重要的部分。好的,我已经更新了答案。我希望你觉得它有用。我读到了关于swizzling的文章。我先试试。如果不能,我会尝试obj-c桥接。我很确定这是不可能的。
MOAspects.hookClassMethodForClass(UIScreen.self, selector:"mainScreen", position:.Before) {
NSLog("hooked screen!")
}
UIScreen.mainScreen() // -> hooked screen!