【问题标题】:SwiftUI: how to access variable inside Content View [duplicate]SwiftUI:如何访问内容视图中的变量[重复]
【发布时间】:2021-08-03 10:28:01
【问题描述】:

这是我正在为 macOS 构建的 Web 浏览器,我正在尝试访问我的内容视图中的字符串变量。但是我收到了这个错误

Cannot use instance member 'site' within property initializer; property initializers run before 'self' is available

在正文中定义 webView 有效,但按钮中的刷新页面功能停止工作。

struct ContentView: View {
    @State private var site: String = "www.google.com/"
    let webView = WebView(request: URLRequest(url: URL(string:"https://" + site)!))
     
    
    
    var body: some View {
     
      TextField("Enter a URL", text: $site) //This is the address bar
        
        NavigationView{
          //  let webView = WebView(request: URLRequest(url: URL(string: "https://" + site )!))
                   
        webView
            .frame(width: 860, height: 860, alignment: .center)
            
        Button(action: {
            self.webView.refresh()
            }) {
                Text("Refresh Page")
            }
        }
    }
}

网页视图

import SwiftUI
import WebKit
import AppKit

struct WebView: NSViewRepresentable {
    let request: URLRequest
    private var webView: WKWebView?
    
    init (request: URLRequest) {
        self.webView = WKWebView()
        self.request = request
    }
        
    
    func makeNSView(context: Context) -> WKWebView {
        return webView!
    }
 
    
    
    func refresh(){
       webView?.reload()
       
    }
    
    
    func updateNSView(_ nsView: WKWebView, context: Context) {
        nsView.load(request)
    }
    
    
}

【问题讨论】:

标签: swift swiftui


【解决方案1】:

使用计算属性。

var webView: WebView {
        return WebView(request: URLRequest(url: URL(string:"https://" + self.site)!))
}

【讨论】:

  • 它能够成功构建,但应用程序窗口现在不显示。在代码中获取线程 1 断点高亮
  • @dreambug 我在演示中成功运行后发布了 ans。拜托,这与您的立场不同。
  • 它只是调试断点而已
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 2012-04-18
  • 1970-01-01
相关资源
最近更新 更多