SwiftUI 蓝牙更新和视图中的计时器

问题描述 投票:0回答:0

我有一个

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 会起作用。但是当我使用它并且连接到设备并从该设备接收更新(有效)时,计时器不再执行。

这是队列问题吗?

swift swiftui bluetooth bluetooth-lowenergy
© www.soinside.com 2019 - 2024. All rights reserved.