首页 > 解决方案 > 类型“SwiftUIWebView”不符合协议“NSViewRepresentable”

问题描述

我正在关注如何在 SwiftUI 中创建 WebView 的本教程,除了我正在为 macOS 应用程序而不是 IOS 制作它。

我将 UIViewRepresentable 切换到 NSViewRepresentable 并收到此错误:Type 'SwiftUIWebView' does not conform to protocol'NSViewRepresentable'

import SwiftUI
import WebKit
import AppKit


struct SwiftUIWebView: NSViewRepresentable {
    let url: URL?
    
    func makeUIView(context: Context) -> WKWebView {
        let prefs = WKWebpagePreferences()
        prefs.allowsContentJavaScript = true
        let config = WKWebViewConfiguration()
        config.defaultWebpagePreferences = prefs
        let webView = WKWebView(frame: .zero, configuration: config)
        
    }
    
    
    func updateUIView(_ uiView: WKWebView, context: Context) {
        guard let myURL = url else {
            return
        }
        let request = URLRequest(url: myURL)
        uiView.load(request)
        
    }
}

标签: swiftui

解决方案


您还需要使用makeNSView协议委托而不是makeUIView.

struct SwiftUIWebView: NSViewRepresentable {
    let url: URL?
    
    func makeNSView(context: Context) -> WKWebView {
        let prefs = WKWebpagePreferences()
        prefs.allowsContentJavaScript = true
        let config = WKWebViewConfiguration()
        config.defaultWebpagePreferences = prefs
        let webView = WKWebView(frame: .zero, configuration: config)
        return webView
    }
    func updateNSView(_ nsView: WKWebView, context: Context) {
        guard let myURL = url else {
            return
        }
        let request = URLRequest(url: myURL)
        nsView.load(request)
    }
}

推荐阅读