如何在定时器(1 秒)上写入蓝牙外围设备,而不会在多个视图中引用 class 时复制定时器
How to write to a bluetooth peripheral on a timer (1 sec), without the timer duplicating when the class is being referenced in multiple views
要从我的蓝牙外围设备接收数据,我需要向其写入字节(每次写入时都会收到响应)。目标是每 1 秒自动写入外围设备,并能够在多个视图中查看来自 class 的数据和触发功能。
我目前面临的问题是定时器放在哪里,我目前设置在这里
override init() {
Super.init()
//I put the timer in this spot
} //(in my bluetooth class)
我认为它工作得很好,直到我注意到每次我在视图结构中引用 class 时,计时器都会重复。
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in
print("Timer fired!")
self.WriteData() //function to write data to the peripheral
}
struct ViewBluetoothData: View { //I have two similar views to this
@ObservedObject var BluetoothData = BluetoothClass() //This seems to duplicate the timer
var body: some View {
//View where I get data from the class and trigger functions in the class
//Example:
Text("Voltage: \(BluetoothData.Voltage)")
Button {BluetoothData.WriteData(Data: [0x00])} label: {Text("Write Data")}
}
}
目前我引用了 class 3 次,这会导致定时器触发 3 次,从而向外设写入 3 次。
我还尝试在视图中放置一个计时器(它不会那样重复),但这会导致此错误:“蓝牙和接口组合[3578:1298595] [CoreBluetooth] XPC 连接无效”并尝试把它放在蓝牙的其他地方class,但也没有成功(“self”带来的各种麻烦)
我是 swift 的新手,在有关计时器的其他问题中找不到我的答案。任何帮助是极大的赞赏!希望我对我的问题的解释足够好。
它不会复制 Timer,它会创建一个带有新 Timer 的新 Class 实例,您可以尝试在开始时使用单例 - 只强制 class 的一个实例。一个长 运行 的解决方案是使用一些依赖注入解决方案来控制 class 生命周期
要从我的蓝牙外围设备接收数据,我需要向其写入字节(每次写入时都会收到响应)。目标是每 1 秒自动写入外围设备,并能够在多个视图中查看来自 class 的数据和触发功能。
我目前面临的问题是定时器放在哪里,我目前设置在这里
override init() {
Super.init()
//I put the timer in this spot
} //(in my bluetooth class)
我认为它工作得很好,直到我注意到每次我在视图结构中引用 class 时,计时器都会重复。
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in
print("Timer fired!")
self.WriteData() //function to write data to the peripheral
}
struct ViewBluetoothData: View { //I have two similar views to this
@ObservedObject var BluetoothData = BluetoothClass() //This seems to duplicate the timer
var body: some View {
//View where I get data from the class and trigger functions in the class
//Example:
Text("Voltage: \(BluetoothData.Voltage)")
Button {BluetoothData.WriteData(Data: [0x00])} label: {Text("Write Data")}
}
}
目前我引用了 class 3 次,这会导致定时器触发 3 次,从而向外设写入 3 次。
我还尝试在视图中放置一个计时器(它不会那样重复),但这会导致此错误:“蓝牙和接口组合[3578:1298595] [CoreBluetooth] XPC 连接无效”并尝试把它放在蓝牙的其他地方class,但也没有成功(“self”带来的各种麻烦)
我是 swift 的新手,在有关计时器的其他问题中找不到我的答案。任何帮助是极大的赞赏!希望我对我的问题的解释足够好。
它不会复制 Timer,它会创建一个带有新 Timer 的新 Class 实例,您可以尝试在开始时使用单例 - 只强制 class 的一个实例。一个长 运行 的解决方案是使用一些依赖注入解决方案来控制 class 生命周期