我有一些類和內部類有一些定義的方法。每次調用這些方法時,我都需要執行一組特定的操作。我可以在每個方法中編寫一組操作。但我不想搞亂代碼。所以我創建了一個輔助類,在那裏我將傳遞一組類和選擇器。在混合方法中識別方法名
我已經循環遍歷數組,並且使用了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