     public override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<()>) {
         
         if (context == &KVOContext) {
-            var scrollView = superview as? UIScrollView
-            if (keyPath == contentOffsetKeyPath && object as? UIScrollView == scrollView) {
-                var scrollView = object as? UIScrollView
-                if (scrollView != nil) {
+            if let scrollView = superview as? UIScrollView where object as? NSObject == scrollView {
+                if keyPath == contentOffsetKeyPath {
                     var offsetWithoutInsets = previousOffset + scrollViewInsetsDefaultValue.top
                     if (offsetWithoutInsets < -self.frame.size.height) {
-                        if (scrollView?.dragging == false && loading == false) {
+                        if (scrollView.dragging == false && loading == false) {
                             loading = true
                         } else if (loading == true) {
                             labelTitle.text = NSLocalizedString("Loading ...", comment: "Refresher")

                        labelTitle.text = NSLocalizedString("Pull to refresh", comment: "Refresher")
                        animator.changeProgress(-offsetWithoutInsets / self.frame.size.height)
                    }
                    previousOffset = scrollView!.contentOffset.y
                }
            }
        } else {

            scrollView.contentInset = insets
            scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, -insets.top)
        }, completion: {finished in
            self.animator.startAnimation()
            self.action()
        })
    }
    
