diff --git a/Source/Central/BLECentralManager.swift b/Source/Central/BLECentralManager.swift index 3ddc7cb..d8d1b86 100644 --- a/Source/Central/BLECentralManager.swift +++ b/Source/Central/BLECentralManager.swift @@ -13,6 +13,7 @@ import Combine public protocol BLECentralManager: AnyObject { var centralManager: CBCentralManagerWrapper { get } var isScanning: Bool { get } + var state: AnyPublisher { get } func retrievePeripherals(withIdentifiers identifiers: [UUID]) -> AnyPublisher func retrieveConnectedPeripherals(withServices serviceUUIDs: [CBUUID]) -> AnyPublisher @@ -30,7 +31,7 @@ final class StandardBLECentralManager: BLECentralManager { let centralManager: CBCentralManagerWrapper let peripheralBuilder: BLEPeripheralBuilder - var state = CurrentValueSubject(ManagerState.unknown) + var stateSubject = CurrentValueSubject(ManagerState.unknown) let delegate: BLECentralManagerDelegate private var scannedPeripherals = [UUID: BLEPeripheral]() @@ -40,6 +41,10 @@ final class StandardBLECentralManager: BLECentralManager { centralManager.isScanning } + var state: AnyPublisher { + stateSubject.eraseToAnyPublisher() + } + init( centralManager: CBCentralManagerWrapper, managerDelegate: BLECentralManagerDelegate = BLECentralManagerDelegate(), @@ -64,7 +69,7 @@ final class StandardBLECentralManager: BLECentralManager { func observeUpdateState() { delegate .didUpdateState - .sink { self.state.send($0) } + .sink { self.stateSubject.send($0) } .store(in: &cancellables) } diff --git a/Tests/Mocks/MockBLECentralManager.swift b/Tests/Mocks/MockBLECentralManager.swift index dc20a70..1160080 100644 --- a/Tests/Mocks/MockBLECentralManager.swift +++ b/Tests/Mocks/MockBLECentralManager.swift @@ -13,6 +13,11 @@ import Combine final class MockBLECentralManager: BLECentralManager { + private var _state = CurrentValueSubject(ManagerState.unknown) + var state: AnyPublisher { + _state.eraseToAnyPublisher() + } + var centralManager: CBCentralManagerWrapper = MockCBCentralManagerWrapper() var isScanning: Bool = false