【发布时间】:2016-03-22 22:16:54
【问题描述】:
我正在关注Swift & the Objective-C Runtime,它适用于普通方法。
我喜欢swizzle 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);
}
}
【问题讨论】:
-
你的类继承自什么?我相信 swizzling 只适用于继承自
NSObject或使用@objc定义为目标 c 类的类。 -
@CleverError 我在问题中链接了我的要点,你能看看
标签: ios swift class init swizzle