Consider the following code block: import SwiftUI
(考虑以下代码块:import SwiftUI)
struct MeasurementReading: View, Equatable {
@ObservedObject var ble: BluetoothConnectionmanager
@GestureState var isDetectTap = false
@State var MyText:String = "Wait"
static func == (lhs: MeasurementReading, rhs: MeasurementReading)->Bool{
return lhs.MyText == rhs.MyText
}
var body: some View {
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
return HStack {
Spacer()
VStack{
Button(action:{
self.MyText = "(self.ble.getValue()!) mV"
print("Text is (self.MyText as NSString)")
}, label: {
Text(MyText)
.font(.system(size: 40))
.bold()
.foregroundColor(Color.black)
.padding(.trailing, 15)
.frame(height: 100)
})
Button(action: {
self.MyText = "(self.ble.getValue()!) mV"
print("Text is (self.MyText as NSString)")
}, label: {
Text(MyText)
.font(.system(size: 25))
.padding(.top, -20)
.padding(.bottom, 20)
.foregroundColor(Color.black)
})
}
}.onReceive(timer)
{ _ in // TIMER FUNCTIONALITY HERE
self.MyText = "(self.ble.getValue()!) mV"
print("Text is (self.MyText)")
}
}
}
struct MeasurementReading_Previews: PreviewProvider {
static var previews: some View {
MeasurementReading(ble: BluetoothConnectionmanager())
}
}
Every 1 second the correct value read from the BLE system is assigned to MyText and then MyText is printed to the debug output properly with the updated value.
(每隔1秒钟将从BLE系统读取的正确值分配给MyText,然后将MyText与更新后的值正确打印到调试输出。)
The problem here is that view MeasurementReading does not update.
(这里的问题是视图MeasurementReading不会更新。)
Also, using a closure on any item also has the same behavior (variable is updated, it is output properly but no view update) ex .onTap{....} will have the same behavior or any other .onXXXX closure. (此外,在任何项目上使用闭包也具有相同的行为(变量已更新,可以正确输出,但没有视图更新),例如.onTap {....}将具有相同的行为或任何其他.onXXXX闭包。)
The only way I could get the view to update at all with new values for the MyText state is to put the behavior in a Button. (我可以使用MyText状态的新值来更新视图的唯一方法是将行为放在Button中。)
My question is this: Why does the view not update even when the state variable changes via Timer or .onXXXX closure?
(我的问题是:即使状态变量通过Timer或.onXXXX闭包更改,为什么视图也不更新?)
ask by Matt translate from so 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…