Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/audio/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/intellij-idea/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swiftui 为什么状态变量不';该Swift代码的某些部分不会发生变化吗?_Swiftui - Fatal编程技术网

Swiftui 为什么状态变量不';该Swift代码的某些部分不会发生变化吗?

Swiftui 为什么状态变量不';该Swift代码的某些部分不会发生变化吗?,swiftui,Swiftui,我很难理解下面的代码。如果您查看我的注释,我试图在代码的不同部分更改绑定变量,但它仅在协调器中的WKWebView事件函数中起作用 当我在代码的其他部分尝试这样做时,为什么变量没有改变 导入可可粉 导入快捷键 导入WebKit 导入PlaygroundSupport 结构内部浏览器:NSViewRepresentable{ var webView:WKWebView=WKWebView() @绑定变量状态:字符串 func makeNSView(上下文:context)->WKWebView{

我很难理解下面的代码。如果您查看我的注释,我试图在代码的不同部分更改绑定变量,但它仅在协调器中的WKWebView事件函数中起作用

当我在代码的其他部分尝试这样做时,为什么变量没有改变

导入可可粉
导入快捷键
导入WebKit
导入PlaygroundSupport
结构内部浏览器:NSViewRepresentable{
var webView:WKWebView=WKWebView()
@绑定变量状态:字符串
func makeNSView(上下文:context)->WKWebView{
self.webView.load(url)请求(url:url(字符串):https://www.google.com")!))
self.webView.navigationDelegate=context.coordinator
//这不会更改绑定变量
self.status=“makeNSView”
返回self.webView
}
func updateNSView(nsView:WKWebView,context:context){
}
func makeCoordinator()->Coordinator{
退货协调员(家长:本人)
}
类协调器:NSObject,WKNavigationDelegate{
变量父项:内部浏览器
初始化(父级:InternalBrowser){
self.parent=parent
//这不会更改绑定变量
self.parent.status=“Coordinator::init”
}
func webView(webView:WKWebView,didStartProvisionalNavigation:WKNavigation!){
//这很有效
self.parent.status=“正在加载”
}
func webView(webView:WKWebView,didfish导航:WKNavigation!){
//这很有效
self.parent.status=“已加载”
}
}
}
结构浏览器:视图{
@State var status=“status”
var body:一些观点{
VStack{
内部浏览器(状态:self.$status).框架(宽度:400,高度:400)
文本(自我状态)
}
}
}
PlaygroundPage.current.setLiveView(浏览器().frame(宽:500,高:500))
当我在代码的其他部分尝试这样做时,为什么变量没有改变


@Binding
影响相应的
@State
,这本身会导致相应的视图重建,但是(!)
NSViewRepresentable.makeNSView
Coordinator.init
在(!)视图重建期间被调用。。。所以,在视图重建期间更改状态会导致新的视图重建,从而导致新的状态更改。。。周期这种情况由SwiftUI渲染引擎处理,并且。。。这样的状态更改将被忽略。这就是你看到的。

谢谢,你的解释很有道理。我认为这是一个很容易犯的错误,我希望编译器发出警告。渲染是运行时过程。。。所以您可能会遇到这样的警告——“在视图更新期间修改状态,这将导致未定义的行为。”-就是这样。