我正在跟随 Swift 和 Objective-C 运行时,对于普通方法它是有效的。
我想要交换 init 方法,以我的理解,init 就像一个类方法。所以我尝试了将 init 作为实例和类方法进行交换。但它似乎并不起作用。
我可以使用 Objective C 让它工作,只是想知道如何在 Swift 中让它工作
摘自我的 gist
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);
}
}
NSObject
或使用@objc
定义为Objective-C类的类。 - Craig Siemens