iOS Swift 3 create URLSession extension for synchronous and asynchronous request
我将在Swift 3中为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | extension URLSession { func sendSynchronousRequest(request: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) { let semaphore = DispatchSemaphore(value: 0) let task = self.dataTask(with: request) { (data, response, error) in completionHandler(data,response,error) semaphore.signal() } task.resume() semaphore.wait(timeout: .distantFuture) } func sendAsynchronousRequest(request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask { let task = self.dataTask(with: request) { data, response, error in completionHandler(data, response, error) } task.resume() return task } } |
我有Xcode建议我将@escaping插入到函数中。 我不知道实施是否正确
我在这一行也有警告:
有人知道如何更正扩展名吗?
我找到了这个实现,但是在swift1 / 2中不记得了。 这不是我自己的。 但是我很快改写了它。 我只是不记得我在哪里找到的:/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | func synchronousDataTaskWithURL(url: URL) -> (Data?, URLResponse?, Error?) { var data: Data?, response: URLResponse?, error: Error? let semaphore = DispatchSemaphore(value: 0) dataTask(with: url) { data = $0; response = $1; error = $2 semaphore.signal() }.resume() semaphore.wait() return (data, response, error) } |