我有许多类,并且在类内部定义了许多方法。当每个方法被调用时,我需要执行一组特定的操作。我可以在每个方法中编写一组操作。但我不想弄乱代码。所以我创建了一个辅助类,在里面我将传递一组类和选择器。
我已经遍历了数组,并使用了 swizzling 技术,并将每个方法的实现与帮助程序类中定义的自定义方法进行了交换。因此,每当上述任何类中的任何方法被触发时,我都会调用我的自定义 swizzling 方法。
但我的问题是我无法区分哪个是触发的原始方法。基于此,一些参数将在我上面提到的自定义操作集中发生变化。
我目前的实现如下:
for i in 0..<classes.count {
let eachClass:AnyClass = classes[i] as AnyClass
let eachSelector:Selector = selectors[i] as Selector
let swizzilableClass = MyHelper.self
let originalMethod = class_getInstanceMethod(eachClass, eachSelector)
let swizzledMethod = class_getInstanceMethod(swizzilableClass, #selector(MyHelper.trackMethodInvocation))
method_exchangeImplementations(originalMethod, swizzledMethod)
}
而当前的 swizzled 方法是:
func trackMethodInvocation() -> Void {
}
因此,每当调用选择器数组中列出的任何方法时,该方法trackMethodInvocation()
都会触发,但我需要知道trackMethodInvocation()
.
有什么方法可以知道哪个是 swizzled 方法中的原始方法。