ios 正在初始化绑定(WebView中)和状态(View中)之间的问题

tkclm6bt  于 2023-02-06  发布在  iOS
关注(0)|答案(1)|浏览(111)

这个问题是编译代码在web视图和视图之间传输变量时遇到的初始化问题,我在3个月前问过(上一个问题是问here),一直没能解决,我放弃了解决,寻找其他替代方案,但想知道问题的原因或解决方案,所以我重新识别了问题,重新创建了问题。
我在Web视图和View之间实现了一个工作表。 工作表中的"let"表达式始终在更改。从视图调用的工作表内容必须由Web视图共享(或相反)。直接在视图中装入Web视图时没有问题。但与"let"表达式一起使用时会出现问题。在编译之前会出现以下错误消息:

  • "...无法在属性初始值设定项内使用示例成员" $activeSheet ";属性初始值设定项在"self"可用之前运行..."*

我不仅在视图中使用了init(){...},还使用了各种初始化方法,但初始化错误消息并没有消失。这个问题的最大原因似乎是init的问题,它将@State从视图发送到Web视图,并再次从Web视图请求@Binding的值。
有什么办法吗?

struct ItlnrView: View {
    
    @State var activeSheet: **Bool** = false
    .....
    let webView = myWebView(web: nil, actSheet: **$activeSheet**, req: URLRequest(url: URL(string: "https://google.com")!)).  <--- problem

    var body: some View {
        VStack {
            webView
            // myWebView(web: nil, actSheet: $activeSheet, req: URLRequest(url: URL(string: "https://google.com")!)) <--- no problem

        }
        .sheet(isPresented: $activeSheet) {
           // code
        }
     }
}

struct myWebView: UIViewRepresentable {
    
    let request: URLRequest
    var webview: WKWebView?
    
    @Binding var activeSheet: Bool

    init(web: WKWebView?, actSheet: **Binding<Bool>**, req: URLRequest) {
        self.webview = WKWebView()
        self._activeSheet = actSheet
        self.request = req
    }
    ....
    ....
}

如果我不使用let webView,直接在V/HStack中运行myWebView(web:,actSheet:,req:),表值是兼容/共享的,但是我必须使用let webView的/call,因为我必须使用Web视图的"go back"和"reload"功能,所以每当我使用let webView时,$activeSheet上出现初始化错误消息。
无论如何,这个Web视图必须通过let webView...在属性初始化器中使用示例成员$activeSheet
我希望你能理解我所缺少的问题。

e4yzc0pl

e4yzc0pl1#

我解决了它通过Lorem Ipsum建议('把webview的身体'),它的工作很好.

struct ItlnrView: View {
    
    @State var activeSheet: **Bool** = false
    .....

    var body: some View {

        let webView = myWebView(web: nil, actSheet: $activeSheet, req: URLRequest(url: URL(string: "https://google.com")!))

        VStack {
            webView
        }
        .sheet(isPresented: $activeSheet) {
           // code
        }
     }
}

struct myWebView: UIViewRepresentable {
    
    let request: URLRequest
    var webview: WKWebView?
    
    @Binding var activeSheet: Bool

    init(web: WKWebView?, actSheet: **Binding<Bool>**, req: URLRequest) {
        self.webview = WKWebView()
        self._activeSheet = actSheet
        self.request = req
    }
    ....
    ....
}

相关问题