我有一个
BluetoothManager
课程:
class BluetoothManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeripheralDelegate {
static let shared = BluetoothManager()
@Published var isBLEOn = false
@Published var foundDevices: [CBPeripheral] = []
@Published var connectedDevices: [CBPeripheral] = []
@Published var heartRate: String = "-"
var centralManager: CBCentralManager!
var heartRatePeripheral: CBPeripheral!
let services = [CBUUID(string: "0x180D")]
let heartRateMeasurementCharacteristicCBUUID = CBUUID(string: "2A37")
let bodySensorLocationCharacteristicCBUUID = CBUUID(string: "2A38")
private override init() {
super.init()
centralManager = CBCentralManager(delegate: self, queue: DispatchQueue(label: "BLECentralManager")) //.init(delegate: self, queue: .main)
connectedDevices = centralManager.retrieveConnectedPeripherals(withServices: services)
for device in connectedDevices {
print("Connected to \(device.name)")
}
}
...
}
此外,我有一个使用该视图的视图
BluetoothManager
:
struct ActivityView: View {
@State var elapsedHours = 0
@State var elapsedMinutes = 0
@State var elapsedSeconds = 0
@State private var mapRegion = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 51.5, longitude: -0.12), span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2))
@State var mapUserTrackingMode = MapUserTrackingMode.none
@StateObject var locationManager = LocationManager()
@StateObject var bluetoothManager = BluetoothManager.shared
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
在主体中,我收到这样的计时器事件:
.onReceive(timer) { timestamp in
当我不使用
BluetoothManager
时,计时器和更新 UI 会起作用。但是当我使用它并且连接到设备并从该设备接收更新(有效)时,计时器不再执行。
这是队列问题吗?