Guest User

Untitled

a guest
Feb 19th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.80 KB | None | 0 0
  1. protocol DataAcquirer {
  2. func acquireData(url: URL) -> Future<Data>
  3. }
  4.  
  5. final class NetworkFacade: DataAcquirer {
  6. private let queue: DispatchQueue
  7. private let session: URLSession
  8.  
  9. func acquireData(url: URL) -> Future<Data> {
  10. let promise = Promise<Data>()
  11. let task = session.downloadTask(with: url) { [queue] (resultUrl, response, error) in
  12. queue.async {
  13. let data = try! Data(contentsOf: resultUrl!)
  14. DispatchQueue.main.async {
  15. promise.resolve(data)
  16. }
  17. }
  18. }
  19. task.resume()
  20. return promise.future
  21. }
  22. }
  23.  
  24. let facade: NetworkFacade
  25. // No race condition: future is accessible only from DispatchQueue.main
  26. let imageAquired = facade.acquireData(url: imageUrl).then(decodeImage(from:))
Add Comment
Please, Sign In to add comment