0

如何将 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 )
信息长度 = 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>
}

谢谢你!!!

4

1 回答 1

0

根据 [the documentation[( 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
    }
}
于 2019-12-04T23:18:56.817 回答