Macos 如何从视图中调用NSViewRepresentable上的方法?

Macos 如何从视图中调用NSViewRepresentable上的方法?,macos,swiftui,Macos,Swiftui,我很难理解NSViewRepresentable如何与SwiftUI视图交互 例如,在下面的示例中,单击视图中的按钮时,如何加载不同的URL 导入可可粉 导入快捷键 导入WebKit 导入PlaygroundSupport 结构内部浏览器:NSViewRepresentable{ func makeNSView(上下文:context)->WKWebView{ 让browser=WKWebView() 加载(url)请求(url:url(字符串):https://www.google.com")

我很难理解NSViewRepresentable如何与SwiftUI视图交互

例如,在下面的示例中,单击视图中的按钮时,如何加载不同的URL

导入可可粉
导入快捷键
导入WebKit
导入PlaygroundSupport
结构内部浏览器:NSViewRepresentable{
func makeNSView(上下文:context)->WKWebView{
让browser=WKWebView()
加载(url)请求(url:url(字符串):https://www.google.com")!))
返回浏览器
}
func updateNSView(nsView:WKWebView,context:context){
}
}
结构浏览器:视图{
var body:一些观点{
GeometryReader{g in
VStack{
InternalBrowser().框架(宽度:400,高度:400)
按钮(操作:{
//如何告诉InternalBrowser在此处加载URL?
}) {
文本(“加载不同的URL”)
}
}
}
}
}
PlaygroundPage.current.setLiveView(浏览器().frame(宽:500,高:500))
单击视图中的按钮时,如何加载不同的URL

下面是一个可能方法的演示。使用Xcode 11.4/iOS 13.4进行测试

struct InternalBrowser: NSViewRepresentable {
    @Binding var url: URL?

    func makeNSView(context: Context) -> WKWebView {
        return WKWebView()
    }

    func updateNSView(_ browser: WKWebView, context: Context) {
        if let url = self.url, url != browser.url {
            browser.load(URLRequest(url: url))
        }
    }
}

struct Browser: View {
    @State var resourceURL = URL(string: "https://www.google.com")
    var body: some View {
        VStack {
            Button(action: {
                self.resourceURL = URL(string: "https://www.stackoverflow.com")
            }) {
                Text("Load Different URL")
            }
            Divider()
            InternalBrowser(url: self.$resourceURL).frame(width: 400, height: 400)
        }
    }
}