我正在尝试通过按钮操作来更新/设置滑块值。
Button(action: {
if self.questionNum == 1{
print("End")
}else{
self.questionNum -= 1
//This line here is where the value is being set.
self.slider.value = self.model.answers[self.questionNum - 1] as! Double
print(self.model.answers)
print(self.slider.value)
self.questionOpacity = 0
self.model.currentQuestion = self.model.questions[self.questionNum - 1]
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
withAnimation(){
self.questionOpacity = 1
}
}
}
}) {
Text("Previous Question")
.font(.system(size: 25))
.fontWeight(.medium)
.foregroundColor(Color.white)
.multilineTextAlignment(.center)
}
滑杆值实际上发生了变化,但是转盘不会移动或更新以代表新值。我的Slider值来自像这样的Observable对象:
class SliderVal: ObservableObject {
var didChange = PassthroughSubject<SliderVal,Never>()
var value = 50.0 {
willSet {
print(self.value)
}
}
滑块的默认值设置为50,即中间值,是否可以通过任何方式将滑块值设置和更新为存储在数组中的值?输出滑块值实际上可以给我正确的结果,为什么滑块转盘没有移动/更新?
谢谢
答案 0 :(得分:1)
示例:
struct ContentView: View {
@State var number : Float
var body: some View {
VStack {
Slider(value: $number, in: 1...100)
.padding()
Text("You've selected \(Int(number))")
}.onAppear() {
self.number = 30
}
}
}
答案 1 :(得分:1)
您用于ObservableObject
的模式已经过时(对于Beta有效,现在无效)。而是使用默认的@Published
属性包装器,它将自动更新您的视图,并在需要时提供相应的绑定。
所以在这里您的模型应该如何...
class SliderVal: ObservableObject {
@Published var value = 50.0
}
并且据我所知,应该声明
@ObservedObject var slider = SliderVal()