ぜのぜ

しりとりしようぜのぜのぜのぜ

280日目

日記

今日書いたコード

センサーの設定画面でセンサーを表示できるようにした · Gurrium/Komusou@1082ae2 · GitHub

final class BluetoothManager: NSObject {
    static let shared = BluetoothManager()

    @Published
    private(set) var discoveredPeripherals = Set<CBPeripheral>()
    @Published
    private(set) var isBluetoothEnabled = false

    private let centralManager = CBCentralManager()

    override init() {
        super.init()

        centralManager.delegate = self
    }

    func startScanningSensors() {
        centralManager.scanForPeripherals(withServices: [.cyclingSpeedAndCadence], options: nil)
    }

    func stopScanningSensors() {
        centralManager.stopScan()
    }
}

extension BluetoothManager: CBCentralManagerDelegate {
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        isBluetoothEnabled = central.state == .poweredOn
    }

    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        discoveredPeripherals.insert(peripheral)
    }
}

感想

今日は難産だった。Combineがいい感じに使えてよかった反面、別の画面でのスキャンの結果も受け取ることになるので微妙な気もする。一旦同時に一つの画面からしか使わないから大丈夫ということにしたが…あとCBPeripheralをViewに露出するのはやめたい。