如何在swift 3中调用URLSession类方法dataTask

时间:2017-05-01 10:39:34

标签: swift swift3 method-swizzling

我想调用URLSession类方法dataTask但是无法完成它。

我在objective-c中尝试了这个调整,它的工作正常,现在我想在swift 3中实现它,但没有得到任何东西。

我指的是   this链接,但它不在swift 3中工作。

请帮帮我。

2 个答案:

答案 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