From 3bab367ce26650a1f8ec5bd90f3f771e07f3ddb5 Mon Sep 17 00:00:00 2001 From: Nikita Semenov Date: Wed, 11 Jan 2023 14:19:21 +0300 Subject: [PATCH] fix: code review notes --- .../WebViewError/WebViewJSError.swift | 9 +++++++++ .../Views/BaseInitializableWebView.swift | 2 +- .../Views/ViewModels/DefaultWebViewModel.swift | 17 +++++++---------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/TIWebView/Sources/ErrorHandler/WebViewError/WebViewJSError.swift b/TIWebView/Sources/ErrorHandler/WebViewError/WebViewJSError.swift index fd7bf336..b28a2a28 100644 --- a/TIWebView/Sources/ErrorHandler/WebViewError/WebViewJSError.swift +++ b/TIWebView/Sources/ErrorHandler/WebViewError/WebViewJSError.swift @@ -59,4 +59,13 @@ public struct WebViewJSError: WebViewError, Codable { self.columnNumber = columnNumber self.stackTrace = stackTrace } + + public init?(from json: [String: Any]) { + guard let data = try? JSONSerialization.data(withJSONObject: json), + let error = try? JSONDecoder().decode(WebViewJSError.self, from: data) else { + return nil + } + + self = error + } } diff --git a/TIWebView/Sources/Views/BaseInitializableWebView.swift b/TIWebView/Sources/Views/BaseInitializableWebView.swift index e73ebdd8..4782cd1b 100644 --- a/TIWebView/Sources/Views/BaseInitializableWebView.swift +++ b/TIWebView/Sources/Views/BaseInitializableWebView.swift @@ -82,7 +82,7 @@ open class BaseInitializableWebView: WKWebView, // MARK: - Public methods - public func subscribe(onProgress: ParameterClosure? = nil) -> NSKeyValueObservation { + public func subscribe(onProgress: ParameterClosure?) -> NSKeyValueObservation { observe(\.estimatedProgress, options: [.new]) { webView, change in if webView.isLoading, let newValue = change.newValue { onProgress?(newValue) diff --git a/TIWebView/Sources/Views/ViewModels/DefaultWebViewModel.swift b/TIWebView/Sources/Views/ViewModels/DefaultWebViewModel.swift index efdf33e6..b772bbae 100644 --- a/TIWebView/Sources/Views/ViewModels/DefaultWebViewModel.swift +++ b/TIWebView/Sources/Views/ViewModels/DefaultWebViewModel.swift @@ -46,21 +46,18 @@ open class DefaultWebViewModel: NSObject, WebViewModel { open func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { - if message.name == WebViewErrorConstants.errorMessageName { - let error = parseError(message) + if message.name == WebViewErrorConstants.errorMessageName, + let error = parseError(message) { errorHandler.didRecievedError(error) } } // MARK: - Private methods - private func parseError(_ message: WKScriptMessage) -> WebViewError { - let body = message.body as? [String: Any] - return WebViewJSError(sourceURL: body?[WebViewErrorConstants.errorUrl] as? String, - name: body?[WebViewErrorConstants.errorName] as? String, - message: body?[WebViewErrorConstants.errorMessage] as? String, - lineNumber: body?[WebViewErrorConstants.errorLineNumber] as? Int, - columnNumber: body?[WebViewErrorConstants.errorColumnNumber] as? Int, - stackTrace: body?[WebViewErrorConstants.errorStack] as? String) + private func parseError(_ message: WKScriptMessage) -> WebViewError? { + guard let body = message.body as? [String: Any] else { + return nil + } + return WebViewJSError(from: body) } }