在 swift 中将 CBUUID 转换为 NSNumber



如何将 CBUUID 转换为 UINT16?

我想将广告数据中的设备信息作为 UINT16 获取。

我收到错误

无法将类型为"CBUUID"(0x1d2715e68(的值转换为"NSNumber"(0x1d25c9db0(。 2019-12-04 14:17:18.731697-0500 项目名称[717:125723] 无法将类型为"CBUUID"(0x1d2715e68(的值转换为"NSNumber"(0x1d25c9db0(。

我在终端中的广告数据

[
"kCBAdvDataTxPowerLevel": 0,"kCBAdvDataIsConnectable": 1, "kCBAdvDataTimestamp": 597179838.727399,


"kCBAdvDataServiceUUIDs": <__NSArrayM 0x281252e20>( 22043200-9530-4EA8-9D21-04146852E51F ) ,
"kCBAdvDataServiceData": { "设备信息" = {长度 = 6,字节 = 0x010000020004}; },
"kCBAdvDataLocalName": base0
]

我以粗体突出显示了我需要的信息。

我在下面有以下代码。

public func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
guard peripheral.state != .connected else {
return
}

let advertisementDataService = advertisementData[CBAdvertisementDataServiceDataKey]
let deviceInformation = advertisementDataService as! Dictionary<UInt16,AnyObject>
}

谢谢!!!

根据 [文档[(https://developer.apple.com/documentation/corebluetooth/cbadvertisementdataservicedatakey(,与CBAdvertisementDataServiceDataKey关联的字典的类型为<CBUUID,Data>. 检索字典后,您可以使用适当的CBUUID实例(0x180A是设备信息服务(对其进行下标。

public func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
guard peripheral.state != .connected else {
return
}

if let deviceInformation = advertisementData[CBAdvertisementDataServiceDataKey] as? Dictionary<CBUUID,Data>, 
let data = deviceInformation[CBUUID(string:"0x180A")] {
// Do something with the data
}
}

最新更新