swiftui - 类型“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)
}
}
解决方案
您还需要使用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)
}
}
推荐阅读
- php - 如何从用于 CSV 导出的数组中删除空元素
- java - 默认情况下,在 jersey api 中未为 formdata 设置 Content-Length
- ckeditor - 在 CKEditor 5 中获取当前选定的元素
- python - FileNotFound 错误/使用 PyPDF2 和 os.listdir() 读取 PDF 文件
- list - 将两个列表的值与 tcl 中的科学值进行比较,并返回新列表中的最高值
- database - 在 Power BI 中创建关系时出现关系错误
- mongodb - 如何使用 mongoDB 聚合获取行总和和列总和
- python - Heroku 调度函数使用 Heroku Scheduler Python
- python - 根据其他列的值比较值和颜色 Pandas 单元格
- spring-boot - Spring Boot 2.1.4:@Autowired 在自定义 Jackson 序列化器/反序列化器中不起作用,如何启用它?