如何将CBUUID转换为UINT16?
我想以UINT16的形式获取广告数据中的设备信息。
我收到错误
无法将类型'CBUUID'(0x1d2715e68)的值强制转换为'NSNumber'(0x1d25c9db0)。
2019-12-04 14:17:18.731697-0500 ProjectName [717:125723]无法将类型'CBUUID'(0x1d2715e68)的值强制转换为'NSNumber'(0x1d25c9db0)。
我在终端中的广告数据
[“ kCBAdvDataTxPowerLevel”:0,“ kCBAdvDataIsConnectable”:1,“ kCBAdvDataTimestamp”:597179838.727399,“ kCBAdvDataServiceUUIDs”:(
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
}
}
关于ios - 快速将CBUUID转换为NSNumber,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59183515/