记录控制器方法从一点Swift

时间:2016-05-05 06:37:12

标签: swift logging

我想记录所有控制器方法调用,包括methodname,methodparams,并且不想为每个方法写一个日志。它应该从一个点来处理。是否有可能在swift中编写拦截器或方面?

离。 2016-05-05 09:47:33.927 xxx [58787:27517992]用params调用init()方法[" xxx"," yyy"]

感谢。

1 个答案:

答案 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 - 出现的声明的名称。

Apple official source

关于面向方面的编程,不幸的是,Swift现在没有运行时支持。你必须参考obj-c桥接。

如果您想使用这种方法,有一个名为MOAspect的有趣库可能很有用:

MOAspects.hookClassMethodForClass(UIScreen.self, selector:"mainScreen", position:.Before) {
    NSLog("hooked screen!")
}

UIScreen.mainScreen() // -> hooked screen!