我有一些类和内部类有一些定义的方法。每次调用这些方法时,我都需要执行一组特定的操作。我可以在每个方法中编写一组操作。但我不想搞乱代码。所以我创建了一个辅助类,在那里我将传递一组类和选择器。在混合方法中识别方法名
我已经循环遍历数组,并且使用了swizzling技术并使用helper类中定义的自定义方法交换了每个方法的实现。因此,无论何时上述任何类中的任何方法触发,我都会调用我的自定义调整方法。
但我的问题是我无法区分触发的原始方法。基于这些参数将在我上面提到的自定义操作集中发生变化。
我目前的实现是像下面:
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)
}
而且currensponding搅和方法是:
func trackMethodInvocation() -> Void {
}
所以每当任何的选择阵列中列出的方法被调用时,方法trackMethodInvocation()
会触发,但我需要知道trackMethodInvocation()
内的原始选择器。
有没有什么办法可以知道哪个是调整方法中的原始方法。
这一切听起来像它将是一个令人费解的维修噩梦。你确定这是必要的吗?顺便说一句,使用'classes.indices'而不是'0 ..
Alexander
所以我的主要目的只是一个尝试。我需要添加一些分析工具以添加到项目中以跟踪不同的按钮操作。所以我只是试图找到有什么办法可以避免IBActions中与分析相关的代码,以及识别每个IBAction触发器的方法,以便我可以将分析代码添加到该方法中,并使IBAction与按钮操作相关的代码保持不变。 – Sreekanth