我想调用URLSession类方法dataTask但是无法完成它。
我在objective-c中尝试了这个调整,它的工作正常,现在我想在swift 3中实现它,但没有得到任何东西。
我指的是 this链接,但它不在swift 3中工作。
请帮帮我。
答案 0 :(得分:1)
我们可以在swift中调整方法如下
let selectorfirst = #selector(ClassName.function(_:))
let swizzledFunction = #selector(ClassName.function2(_:))
let method1 = class_getInstanceMethod(ClassInstance, selectorfirst)
let method2 = class_getInstanceMethod(ClassInstance, swizzledFunction)
method_exchangeImplementations(method1, method2)
//使用子类
尝试这样做 class URLSessionSubClass: URLSession {
static var sharedInstance: URLSessionSubClass?
static func getSharedInstance() -> URLSessionSubClass {
if sharedInstance == nil {
sharedInstance = URLSessionSubClass()
let selectorfirst = #selector(URLSessionSubClass.function(_:))
let swizzledFunction = #selector(URLSessionSubClass.function2(_:))
let method1 = class_getInstanceMethod(self, selectorfirst)
let method2 = class_getInstanceMethod(self, swizzledFunction)
method_exchangeImplementations(method1, method2)
}
return sharedInstance!
}
}
答案 1 :(得分:0)
我已经尝试过使用简单的NSURLSession刷新,但是它确实有效,但是在尝试实现Alamorfire和其他第三方Network SDK的刷新时,它没有效果,因为我们需要从URLProtocol的基础上实现URLSessionConfiguration.default。使用swizzling方法并添加所有属性,例如startLoading,stopLoading,init和canInit功能。还添加URLSession委托方法以返回值。
https://gist.github.com/nil-biribiri/ceead941d5b482207cb1b872c5d76a60