簡體   English   中英

快速將 CBUUID 轉換為 NSNumber

[英]Convert CBUUID to NSNumber in swift

如何將 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>
}

謝謝你!!!

根據 [文檔[( https://developer.apple.com/documentation/corebluetooth/cbadvertisementdataservicedatakey ),與CBAdvertisementDataServiceDataKey關聯的字典的類型為<CBUUID,Data> 檢索字典后,您可以使用適當的CBUUID實例(0x180A 是設備信息服務) CBUUID下標。

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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM