     }
 }
 
+public struct PhotoLibraryFetchResultDataSource {
+    public private(set) var fetchResult: PHFetchResult<PHObject>
+    public private(set) var objects: [PHObject]
+}
+
 @objc(PhotoLibraryDelegate)
 public protocol PhotoLibraryDelegate {
     /**

    
    /// A method used to prepare the instance object.
    private func prepare() {
        prepareCollections()
        prepareChangeObservers()
    }
    
    /// Prepares the collections.
    private func prepareCollections() {
        collections = [PhotoLibraryDataSource]()
    }
    
    /// A method used to enable change observation.

    private func fetch<T: PHFetchResult<U>, U: PHObject>(result: T, completion: ([U], T) -> Void) {
        var objects = [U]()
        
        defer {
            // Stores for change observation.
            fetchResults.append(PhotoLibraryFetchResultDataSource(fetchResult: result as! PHFetchResult<PHObject>, objects: objects))
        }
        
        result.enumerateObjects({ (collection, _, _) in
            objects.append(collection)
        })
