title: Cancellable set of asynchronous operations with progress reporting in iOS
body: <p>Suppose that I use another SDK (which I do not have control of) with an API that imports 1 file asynchronously, and calls a completion callback on completion.
  The following is an example API.</p>
  
  <pre><code>func importFile(filePath: String, completion: () -&gt; Void)
  </code></pre>
  
  <p>I need to import 10 files (one by one) using this API, but I need it to be cancellable, e.g. after Files 1,2,3 has been successfully imported, while File 4 is being imported, I want to be able to cancel the whole set of operations (import of the 10 Files), such that File 4 will finish (since it already started), but Files 5-10 will not be imported anymore.</p>
  
  <p>In addition, I also need to report progress of the import. When File 1 has been imported successfully, then I should report progress of 10% (1 out of 10 has been finished).</p>
  
  <p>How can I achieve this?</p>
  
  <p>I am considering using NSOperationQueue with 10 NSOperations, but it seems that progress reporting will be difficult.</p>