 
 extension GroupOperation: OperationQueueDelegate {
 
+    /**
+    The group operation acts as it's own queue's delegate. When an operation is added to the queue,
+    assuming that the finishing operation has not started (or finished), and the operation is not
+    the finishing operation itself, then we add the operation as a dependency to the finishing
+    operation.
+    
+    The purpose of this is to keep the finishing operation as the last child operation that executes
+    when there are no more operations in the group.
+    */
     public func operationQueue(queue: OperationQueue, willAddOperation operation: NSOperation) {
         assert(!finishingOperation.finished && !finishingOperation.executing, "Cannot add new operations to a group after the group has completed.")
 

    often need to move the results of one operation into the next one. So this
    can be done here.

    :param: operation, an `NSOperation`
    :param:, errors, an array of `ErrorType`s.
    */
    public func operationDidFinish(operation: NSOperation, withErrors errors: [ErrorType]) {
        // no-op, subclasses can override for their own functionality.

    /**
    Add an `NSOperation` to the group's queue.
    
    - parameter operation: an `NSOperation` instance.
    */
    public func addOperation(operation: NSOperation) {
        queue.addOperation(operation)
    }

    /**
    Add multiple operations at once.
    
    - parameter operations: an array of `NSOperation` instances.
    */
    public func addOperations(operations: [NSOperation]) {
        queue.addOperations(operations, waitUntilFinished: false)
    }
