     ///
     /// - Returns: The return value of the matching `URLOpenHandler`. Returns `false` if there's no match.
     public func openURL(URL: URLConvertible) -> Bool {
-        if let (URLPattern, values) = URLNavigator.matchURL(URL, from: Array(self.URLOpenHandlers.keys)) {
+        let URLOpenHandlersKeys = Array(self.URLOpenHandlers.keys)
+        if let (URLPattern, values) = URLNavigator.matchURL(URL, scheme: self.scheme, from: URLOpenHandlersKeys) {
             let handler = self.URLOpenHandlers[URLPattern]
             if handler?(URL: URL, values: values) == true {
                 return true


    // MARK: Utils

    /// Returns the URL by
    ///
    /// - Removing redundant trailing slash(/) on scheme


    /// Map an `URLNavigable` to an URL pattern.
    public func map(URLPattern: URLConvertible, _ navigable: URLNavigable.Type) {
        let URLString = URLNavigator.normalizedURL(URLPattern, scheme: self.scheme).URLStringValue
        self.URLMap[URLString] = navigable
    }

    /// Map an `URLOpenHandler` to an URL pattern.
    public func map(URLPattern: URLConvertible, _ handler: URLOpenHandler) {
        let URLString = URLNavigator.normalizedURL(URLPattern, scheme: self.scheme).URLStringValue
        self.URLOpenHandlers[URLString] = handler
    }

