我想记录所有控制器方法调用,包括methodname,methodparams,并且不想为每个方法写一个日志。它应该从一个点来处理。是否有可能在swift中编写拦截器或方面?
离。 2016-05-05 09:47:33.927 xxx [58787:27517992]用params调用init()方法[" xxx"," yyy"]
感谢。
答案 0 :(得分:0)
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)")
}
更多信息:
#file
- String - 出现的文件的名称。
#line
- Int - 出现的行号。
#column
- Int - 开始的列号。
#function
- String - 出现的声明的名称。
关于面向方面的编程,不幸的是,Swift现在没有运行时支持。你必须参考obj-c桥接。
如果您想使用这种方法,有一个名为MOAspect的有趣库可能很有用:
MOAspects.hookClassMethodForClass(UIScreen.self, selector:"mainScreen", position:.Before) {
NSLog("hooked screen!")
}
UIScreen.mainScreen() // -> hooked screen!