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