Я пытался Swizzle NSURLSession метод класса dataTaskWithRequest, но не был в состоянии сделать этоКак Swizzle NSURLSession метод класса dataTaskWithUrl
extension NSURLSession{
public override class func initialize() {
struct Static {
static var token: dispatch_once_t = 0
}
if self !== NSURLSession.self {
return
}
dispatch_once(&Static.token) {
let originalSelector = Selector("dataTaskWithRequest:completionHandler:")
let swizzledSelector = Selector("my_dataTaskWithRequest:completionHandler:")
let originalMethod = class_getInstanceMethod(self, originalSelector)
let swizzledMethod = class_getInstanceMethod(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)
}
}
}
// Swizzled Method
func my_dataTaskWithRequest(request: NSURLRequest,completionHandler: (NSData?, NSURLResponse?, NSError?)) -> NSURLSessionDataTask {
print("Inside Swizzled Method")
return my_dataTaskWithRequest(request,completionHandler: completionHandler)
}
}
Спасибо заранее !!
Вы уверены, ваш 'initialize' на самом деле называется? В любом случае, вы должны реализовать 'load', а не переопределять' initialize'. [См. Этот вопрос для деталей.] (Http://stackoverflow.com/questions/13326435/nsobject-load-and-initialize-what-do-they-do). – DarkDust