MacOS项目中未声明的类型'UIViewRepresentable'

时间:2019-09-30 09:02:01

标签: swiftui

我创建了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) {
    }
}

2 个答案:

答案 0 :(得分:3)

UI...始终指的是UIKit。

对于macOS,您必须使用NSViewRepresentable

答案 1 :(得分:0)

您可以实现以下代码。然后Xcode将帮助您为相应的目标实现正确的协议:

#if os(macOS)
public typealias ViewRepresentable = NSViewRepresentable
#elseif os(iOS)
public typealias ViewRepresentable = UIViewRepresentable
#endif

macOS目标

Mac


iOS目标

iOS


此外,您可以在一个结构中同时拥有两个实现:

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)
    }
}