I'm building a simple webapp with SwiftUI that simply load my website into the webview. From my website, it has to show the Javascript confirm for users to able to logout from the app and my function inside of runJavaScriptConfirmPanelWithMessage crashes the app when Javascript confirm is triggered.
Here is the entire code of my webapp.
import SwiftUI
import WebKit
struct Webview : UIViewRepresentable {
    let request: URLRequest
    var webview: WKWebView?
    init(web: WKWebView?, req: URLRequest) {
        self.webview = WKWebView()
        self.request = req
    }
    class Coordinator: NSObject, WKUIDelegate {
        var parent: Webview
        init(_ parent: Webview) {
            self.parent = parent
        }
        // Delegate methods go here
        func webView(_ webView: WKWebView,
        runJavaScriptAlertPanelWithMessage message: String,
             initiatedByFrame frame: WKFrameInfo,
             completionHandler: @escaping () -> Void) {
            // alert functionality goes here
            let alertController = UIAlertController(title: nil, message: message, preferredStyle: .alert)
            alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            alertController.present(alertController, animated: true)
            completionHandler()
        }
        func webView(_ webView: WKWebView,
        runJavaScriptConfirmPanelWithMessage message: String,
             initiatedByFrame frame: WKFrameInfo,
             completionHandler: @escaping (Bool) -> Void) {
            // confirm functionality goes here. THIS CRASHES THE APP
            let alertController = UIAlertController(title: nil, message: message, preferredStyle: .alert)
            alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in
                completionHandler(true)
            }))
            alertController.addAction(UIAlertAction(title: "Cancel", style: .default, handler: { (action) in
                completionHandler(false)
            }))
            alertController.present(alertController, animated: true, completion: nil)
        }
        func webView(_ webView: WKWebView,
        runJavaScriptTextInputPanelWithPrompt prompt: String,
                  defaultText: String?,
             initiatedByFrame frame: WKFrameInfo,
             completionHandler: @escaping (String?) -> Void) {
            // prompt functionality goes here
        }
    }
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    func makeUIView(context: Context) -> WKWebView  {
        return webview!
    }
    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.uiDelegate = context.coordinator
        uiView.load(request)
    }
    func goBack(){
        webview?.goBack()
    }
    func goForward(){
        webview?.goForward()
    }
    func reload(){
        webview?.reload()
    }
}
struct ContentView: View {
    let webview = Webview(web: nil, req: URLRequest(url: URL(string: "https://google.com")!))
    var body: some View {
        VStack {
            webview
            HStack() {
                Button(action: {
                    self.webview.goBack()
                }){
                    Image(systemName: "chevron.left")
                }.padding(32)
                Button(action: {
                    self.webview.reload()
                }){
                    Image(systemName: "arrow.clockwise")
                }.padding(32)
                Button(action: {
                    self.webview.goForward()
                }){
                    Image(systemName: "chevron.right")
                }.padding(32)
            }.frame(height: 40)
        }
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
I'm not sure what I did wrong in this section for runJavaScriptConfirmPanelWithMessage that crashes the app. 
Here is the part that I'm having a trouble with.
        func webView(_ webView: WKWebView,
        runJavaScriptConfirmPanelWithMessage message: String,
             initiatedByFrame frame: WKFrameInfo,
             completionHandler: @escaping (Bool) -> Void) {
            // confirm functionality goes here. THIS CRASHES THE APP
            let alertController = UIAlertController(title: nil, message: message, preferredStyle: .alert)
            alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in
                completionHandler(true)
            }))
            alertController.addAction(UIAlertAction(title: "Cancel", style: .default, handler: { (action) in
                completionHandler(false)
            }))
            alertController.present(alertController, animated: true, completion: nil)
        }
Can anyone tell me what I'm doing wrong here?
 
     
    