快速将CBUUID转换为NSNumber

时间:2019-12-04 19:38:54

标签: ios swift core-bluetooth swift5.1 uint16

如何将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”:<__ 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>
}

谢谢!

1 个答案:

答案 0 :(得分:0)

根据[文档[(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
    }
}