Я следую Swift & the Objective-C Runtime, он работает для обычных методов.Как swizzle init в Swift
Мне нравится подкачать метод init, из моего понимания, init - это как метод класса. Поэтому я попробовал swizzling 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' или определяются как объективный класс c, используя' @ objc'. –
@CleverError Я связался с моим вопросом в вопросе, вы можете посмотреть – onmyway133