这个问题是编译代码在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
。
我希望你能理解我所缺少的问题。
1条答案
按热度按时间e4yzc0pl1#
我解决了它通过Lorem Ipsum建议('把webview的身体'),它的工作很好.