Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.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
Ios SwiftUI中状态后绑定更新,触发2次更新_Ios_Swiftui - Fatal编程技术网

Ios SwiftUI中状态后绑定更新,触发2次更新

Ios SwiftUI中状态后绑定更新,触发2次更新,ios,swiftui,Ios,Swiftui,我注意到,如果绑定和状态在同一with animation块中更改,则状态将首先更新,触发重画,然后更新绑定,触发第二次重画。当我使用两个状态变量代替绑定时,重绘只发生一次,同时更新两个值: struct ContentView:View{ @绑定变量x1:Int //@State var x1:Int @状态变量x2:Int=0 var body:一些观点{ VStack{ 按钮(操作:{ 动画片{ x1+=1 x2+=2 } },标签:{ 文本(“增量”) .padding() }) 文本(

我注意到,如果
绑定
状态
在同一
with animation
块中更改,则
状态
将首先更新,触发重画,然后更新
绑定
,触发第二次重画。当我使用两个
状态
变量代替
绑定时,重绘只发生一次,同时更新两个值:

struct ContentView:View{
@绑定变量x1:Int
//@State var x1:Int
@状态变量x2:Int=0
var body:一些观点{
VStack{
按钮(操作:{
动画片{
x1+=1
x2+=2
}
},标签:{
文本(“增量”)
.padding()
})
文本(“总计:\(总计)”)
}
}
变量总计:Int{
打印(“\(x1)+\(x2)=\(x1+x2)”)
返回x1+x2
}
}
按下按钮时,控制台会打印:

0 + 2 = 2
1 + 2 = 3
如果我切换并使用两个
状态
变量,我只会看到一个打印:

1 + 2 = 3
为什么会这样?有没有一种方法可以继续使用
绑定
状态
,但只触发一次重画

编辑 Xcode 12.2,iOS 14.2

编辑2 Xcode 12.1,iOS 14.1

我刚把它放在
应用程序中。我知道这个例子没有意义,但在其他情况下有意义。设想一个
视图
,其布局根据一些状态变量和绑定而变化。绑定是从一个容器中手动更新视图布局,我使用的是Xcode 12.2和iOS 14.2模拟器,但我在以前的版本中见过。绑定绑定在容器中的一个状态变量
@state var x1=0
,然后使用它的投影值
ContentView(x1:$x1)
请原谅,但我不认为这是无法复制的(请参见编辑)