不使用 init 模拟 URLSessionDataTask

gmo*_*eda 6 xcode ios swift

我正在尝试模拟我的URLSession实例,在研究 StackOverflow 后,我发现一种方法是创建一个模拟的 URLSessionDataTask 并调用完成处理程序resume()

class URLSessionDataTaskMock: URLSessionDataTask {
    private let closure: () -> Void

    init(closure: @escaping () -> Void) {
        self.closure = closure
    }

    override func resume() {
        closure()
    }

    override func cancel() {
        closure()
    }
}

class URLSessionMock: URLSession {
    typealias CompletionHandler = (Data?, URLResponse?, Error?) -> Void
    var data: Data?
    var error: Error?
    override func dataTask(
        with _: URLRequest,
        completionHandler: @escaping CompletionHandler
    ) -> URLSessionDataTask {
        let data = self.data
        let error = self.error
        return URLSessionDataTaskMock {
            completionHandler(data, nil, error)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我面临的问题是URLSessionDataTask.init从 iOS 13 开始已被弃用:

'init()' 在 iOS 13.0 中已弃用:请使用 -[NSURLSession dataTaskWithRequest:] 或其他 NSURLSession 方法来创建实例

是否有更新的方法来实现相同的目标?