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)
请原谅,但我不认为这是无法复制的(请参见编辑)