我正在关注Swift 和 Objective-C Runtime,它适用于普通方法。
我喜欢swizzle init 方法,据我了解,init 就像一个类方法。所以我尝试将 init 作为实例和类方法。但这似乎不起作用
我可以使用 Objective C 让它工作,只是想知道如何让它在 Swift 中工作
摘自我的要点
dispatch_once(&Static.token) {
let originalSelector = Selector("init:source:destination:")
let swizzledSelector = Selector("ftg_init:source:destination:")
let originalMethod = class_getClassMethod(self, originalSelector)
let swizzledMethod = class_getClassMethod(self, swizzledSelector)
let didAddMethod = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))
if didAddMethod {
class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
}