     // Cache
     private var cache: NSCache = NSCache()
     
-    var dataSource: SPTinderViewDataSource?
+    var dataSource: SPTinderViewDataSource? {
+        didSet {
+            
+        }
+    }
+    
     var delegate: SPTinderViewDelegate?
     var currentIndex: Int = 0
     

                cell.removeFromSuperview()
        })
    }
}

private struct SPCache: CustomStringConvertible {
    
    private var cache: NSCache = NSCache()
    
    mutating func cacheView(view: UIView, atIndexPath indexPath: NSIndexPath) {
        if let _ = cache.objectForKey(indexPath.stringKey) {
            return
        }
        cache.setObject(view, forKey: indexPath.stringKey)
    }
    
    mutating func removeCachedViewAtIndexPath(atIndexPath indexPath: NSIndexPath) {
        cache.removeObjectForKey(indexPath.stringKey)
    }
    
    func cachedView(atIndexPath indexPath: NSIndexPath) -> UIView? {
        return cache.objectForKey(indexPath.stringKey) as? UIView
    }
    
    var description: String {
        return "PGViewCache- \(cache.name)"
    }
}

extension NSIndexPath {
    private var stringKey: String {
        return String("\(self.section)-\(self.row)")
    }
}

        
    }
    
    private func setUpFirstSetOfCells() {
        guard let _dataSource = dataSource else { return }
        let count = _dataSource.numberOfItemsInTinderView(self)
        let visibleCount = _dataSource.numberOfVisibleCellsInTinderView(self)
        for var index = currentIndex; index < min(visibleCount, count - index); index++ {
            if let cell = _dataSource.tinderView(self, cellAtIndex: index) {
                self.insertSubview(cell, atIndex: 0)
                cell.center = positionForCellAtIndex(index)
            }
