如何从核心蓝牙服务中 remove/unsubscribe?

How to remove/unsubscribe from service in core bluetooth?

我尝试通过以下方式实现:

peripheral.services?.removeAll()

但它 returns 错误

cannot use mutating member on immutable value

移除或退订服务的正确方法是什么?

错误明确指出 peripheral.services? 不是不可变的内容。所以你不能编辑里面的内容。

你需要使用

removeAllServices() - 删除所有已发布的服务

remove(CBMutableService) - 删除指定服务

Apple参考

Core bluetooth Reference

您不能从使用 CBCentralManager 发现的外围设备中删除服务;外围设备具有的服务集由该外围设备设置,这就是 属性 不可变的原因。当您使用 CBPeripheralManager.

宣传外围设备时,将使用您尝试使用的功能

连接到外围设备后,您可以选择在特定特征发生变化时接收通知(如果该特征支持notify)使用peripheral.setNotifyValue(bool, for: CBCharacteristic) 或者您可以完全断开与外围设备的连接,但您既没有 'subscribe' 也没有 'unsubscribe' 来自服务。