import UIKit import WebKit import LoadingBarKit class ViewController: UIViewController { @IBOutlet var loadingBar: LoadingBar! var webView: WKWebView? override func viewDidLoad() { super.viewDidLoad() self.webView?.addObserver(self, forKeyPath: "estimatedProgress", options: NSKeyValueObservingOptions.New, context: nil) } } deinit { self.webView?.removeObserver(self, forKeyPath: "estimatedProgress") } // MARK: - Progress monitoring (KVO) override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer) { if (keyPath == "estimatedProgress" && object as NSObject == self.webView!) { self.loadingBar.progress = Float(self.webView!.estimatedProgress) } } }