SwiftUI:在单独的标签中显示滑块位置

SwiftUI:在单独的标签中显示滑块位置,swiftui,Swiftui,这个问题有点像是从 基本上我有一个滑块,它是许多滑块中的一个。每个on都会更改模型类上的一个参数,因此我将传入一个表示模型类上特定属性的绑定。这是因为每次滑块移动时,模型都会获得新值 struct AspectSlider:视图{ 私有变量值:绑定 init(值:Binding,hintKey:String){ 自我价值=价值 } var body:一些观点{ VStack(对齐:。尾部){ 文本(“\(self.value.value)”) 滑块(值:绑定(getValue:{self.val

这个问题有点像是从

基本上我有一个滑块,它是许多滑块中的一个。每个on都会更改模型类上的一个参数,因此我将传入一个表示模型类上特定属性的绑定。这是因为每次滑块移动时,模型都会获得新值

struct AspectSlider:视图{
私有变量值:绑定
init(值:Binding,hintKey:String){
自我价值=价值
}
var body:一些观点{
VStack(对齐:。尾部){
文本(“\(self.value.value)”)
滑块(值:绑定(getValue:{self.value.value},setValue:{self.value.value=$0}),
从:0.0到:4.0,由:0.5)
}
}
}
无法正常工作的是
文本(\(self.value.value)”)
显示,用于显示滑块的当前值。当
绑定
值更改时,它不会更新

相反,它仅在显示器上的其他内容触发显示器刷新时更新。在我的例子中,标签表示模型执行的计算结果(当滑块更改其值时,不一定会更改)


我已经确认模型正在更改,因此绑定正在更新。我的问题是为什么文本标签没有立即更新

如果像这样调用代码,则可以正常工作:

struct ContentView:View{
@国家私有var值:双精度=0
var body:一些观点{
AspectSlider(值:$value,hintKey:“hint”)
}
}
结构AspectSlider:视图{
私有变量值:绑定
init(值:Binding,hintKey:String){
自我价值=价值
}
var body:一些观点{
VStack(对齐:。尾部){
文本(“\(self.value.value)”)
滑块(值:绑定(getValue:{self.value.value},setValue:{self.value.value=$0}),
从:0.0到:4.0,由:0.5)
}
}
}
请注意,您还可以利用属性包装器
@Binding
,以避免使用
self.value.value
。您的实现应该略有变化:

struct AspectSlider:视图{
@绑定私有变量值:Double
init(值:Binding,hintKey:String){
self.$value=value
}
var body:一些观点{
VStack(对齐:。尾部){
文本(“\(self.value)”)
滑块(值:绑定(getValue:{self.value},setValue:{self.value=$0}),
从:0.0到:4.0,由:0.5)
}
}
}

好的,我已经弄明白了为什么我的代码没有按应有的方式更新。归结到我的模型,它看起来像这样(简单版本):

最终类计算器:BindableObject{
让didChange=PassthroughSubject()
变量总数:Int=0
变量透明度:Double=0.0{didSet{calculate()}
私有函数计算(){
如果newValue.rounded()!=双倍(总计){
总计=整数(新值)
didChange.send(self.total)
}
}
}
发生的事情是,只有当这个模型执行
didChange.send(self.total)
行时,sider上的值才会更新。我想,如果我没有弄错的话,那是因为标签正在监视绑定,只有当绑定更新时标签才会更新。有道理。我还在努力


我想这是学习联合收割机及其工作原理的一部分:-)

这对我来说很有用。您能告诉我们如何实例化AspectSlider视图吗?