首页 > 解决方案 > 在类中设置 CoreBluetooth peripheral.delegate

问题描述

我试图从 CoreBluetooth 外围设备中发现服务等,但我遇到了一个问题,因为peripheral.delegate = self(正如我在每个教程中看到的那样)试图将 peripheral.delegate 设置为父 BluetoothHandler 对象。

我的相关代码是:

class BluetoothHandler: NSObject, ObservableObject, CBCentralManagerDelegate {
  func centralManager (_ central: CBCentralManager, didConnect peripheral: CBPeripheral {
    peripheral.delegate = self // Cannot assign value of type BluetoothHandler to CBPeripheralDelegate?
    peripheral.discoverServices(nil)
  }
}

标签: iosswiftbluetoothcore-bluetooth

解决方案


那是因为您BluetoothHandler不符合正确的委托协议,该协议CBPeripheralDelegate代替或补充CBCentralManagerDelegate.

另请注意,您通常应该保持连接的外围设备,例如:

class BluetoothHandler: NSObject, ObservableObject, CBPeripheralDelegate {
    
    var connectedPeripheral: CBPeripheral?
    
    func centralManager (_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        
        connectedPeripheral = peripheral
        
        connectedPeripheral?.delegate = self
        
        connectedPeripheral?.discoverServices(nil)
    }
    
}

推荐阅读