Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- protocol DataAcquirer {
- func acquireData(url: URL) -> Future<Data>
- }
- final class NetworkFacade: DataAcquirer {
- private let queue: DispatchQueue
- private let session: URLSession
- func acquireData(url: URL) -> Future<Data> {
- let promise = Promise<Data>()
- let task = session.downloadTask(with: url) { [queue] (resultUrl, response, error) in
- queue.async {
- let data = try! Data(contentsOf: resultUrl!)
- DispatchQueue.main.async {
- promise.resolve(data)
- }
- }
- }
- task.resume()
- return promise.future
- }
- }
- let facade: NetworkFacade
- // No race condition: future is accessible only from DispatchQueue.main
- let imageAquired = facade.acquireData(url: imageUrl).then(decodeImage(from:))
Add Comment
Please, Sign In to add comment