我在下面有一个代码,试图将 swizzling 方法用于 UIApplication 方法。但是这些方法没有被调用。同时,我正在尝试将此代码添加到框架或私有 pod 中。
extension UIApplication {
public override class func initialize() {
struct Static {
static var token: dispatch_once_t = 0
}
struct SwizzlingSelector {
let original:Selector
let swizzled:Selector
}
// make sure this isn't a subclass
if self !== UIApplication.self {
return
}
dispatch_once(&Static.token) {
let selectors = [
SwizzlingSelector(
original: Selector("application:didFinishLaunchingWithOptions:"),
swizzled: Selector("custome_application:didFinishLaunchingWithOptions:")
),
SwizzlingSelector(
original: Selector("applicationDidEnterBackground:"),
swizzled: Selector("custom_applicationDidEnterBackground:")
)
]
for selector in selectors {
let originalMethod = class_getInstanceMethod(self, selector.original)
let swizzledMethod = class_getInstanceMethod(self, selector.swizzled)
let didAddMethod = class_addMethod(self, selector.original, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))
if didAddMethod {
class_replaceMethod(self, selector.swizzled, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
}
}
}
// MARK: - Method Swizzling
public func custome_application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
print("is here")
return true
}
func custom_applicationDidEnterBackground(application: UIApplication) {
print("is herer")
}
}