SwiftUIのWebViewでFatal error: Unexpectedly found nil while unwrapping an Optional value

SwiftUIでWebView表示しようとしたところエラーが発生。

現象

Xcodeのシミュレーターで日本語を含むURLを読み込むと、以下のエラーが発生して強制的に落ちる。

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

エラーが発生したソースコード

import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {
    let loadUrl: String

    func makeUIView(context: Context) -> WKWebView {
        return WKWebView()
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.load(URLRequest(url: URL(string: loadUrl)!))
    }
}

struct WebView_Previews: PreviewProvider {
    static var previews: some View {
        WebView(loadUrl: "https://example.com/")
    }
}

原因

URLに日本語が含まれていると強制的にnilになってしまうらしい。

対策

URLエンコードを行う。
具体的にはURLに .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! をつけてURLエンコード化する。

実装したソースコード

import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {
    let loadUrl: String

    func makeUIView(context: Context) -> WKWebView {
        return WKWebView()
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        let loadUrlEncoding = loadUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
        uiView.load(URLRequest(url: URL(string: loadUrlEncoding)!))
    }
}

struct WebView_Previews: PreviewProvider {
    static var previews: some View {
        WebView(loadUrl: "https://example.com/")
    }
}

参考