我创建了macOS项目,并尝试使UIViewRepresentable出现但出现此错误。
import SwiftUI
struct WebView: UIViewRepresentable { //Error: Use of undeclared type 'UIViewRepresentable'
}
该怎么办?如何使自己的UIViewRepresentable for macOS在项目中使用WKWebView?
struct WebView: UIViewRepresentable {
func makeUIView(context: Context) -> WKWebView {
WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
}
}
答案 0 :(得分:3)
UI...
始终指的是UIKit。
对于macOS,您必须使用NSViewRepresentable
答案 1 :(得分:0)
您可以实现以下代码。然后Xcode将帮助您为相应的目标实现正确的协议:
#if os(macOS)
public typealias ViewRepresentable = NSViewRepresentable
#elseif os(iOS)
public typealias ViewRepresentable = UIViewRepresentable
#endif
此外,您可以在一个结构中同时拥有两个实现:
struct WebView: ViewRepresentable {
func makeNSView(context: Context) -> WKWebView { WKWebView() }
func makeUIView(context: Context) -> WKWebView { WKWebView() }
func updateNSView(_ nsView: WKWebView, context: Context) { }
func updateUIView(_ nsView: WKWebView, context: Context) { }
}
如果您想拥有一个在两个平台上均可使用的简单实现,请查看 this gist :
import WebKit
struct WebView: ViewRepresentableHelper {
var configuration = { (view: WKWebView) in }
}
var body: some View {
WebView {
$0.load(request)
}
}