SwiftUI:如何访问内容视图中的变量 [英] SwiftUI: how to access variable inside Content View

查看:22
本文介绍了SwiftUI:如何访问内容视图中的变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

This is a web browser i'm building for macOS and I'm trying to access a string variable inside my content view. But i'm getting this error

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

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

defining webView inside the body works but my refresh page function in the button stops working.

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

推荐答案

使用计算属性.

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

这篇关于SwiftUI:如何访问内容视图中的变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆