#swift #nsdictionary
#swift #nsdictionary
Вопрос:
Output:
({
"Client Characteristic Configuration" = <41424344 45463132 31323334 35363738 45324441>;
})
Code :
print("localName4", localName4)
if (localName4 != nil) {
print("exists")
if localName4 is Dictionary<AnyHashable,Any> {
print("Yes, it's a Dictionary")
do {
if let jsonResult = try JSONSerialization.jsonObject(with: localName4 as! Data, options: []) as? NSDictionary {
print(jsonResult)
}
} catch let error as NSError {
print(error.localizedDescription)
}
}
}
Я пытаюсь получить значение <41424344 45463132 31323334 35363738 45324441>
из результата. Когда я пытаюсь проанализировать значение, возникает исключение:
Не удалось преобразовать значение типа ‘NSDictionaryM’ в ‘NSData’
Комментарии:
1. Что вы пытаетесь заархивировать?
localName4
уже есть словарь, и вы пытаетесь преобразовать dict вData
, а затем через JSONSerialization обратно в словарь?2. я пытаюсь получить <41424344 45463132 31323334 35363738 45324441> значение
3. Что именно «Вывод»? С какого принта оно взято?
4. функция centralManager(_ central: CBCentralManager, обнаружила периферийное устройство: CBPeripheral, advertisementData: [Строка: любая], rssi RSSI: NSNumber){ пусть localName4 = advertisementData[CBAdvertisementDataServiceDataKey] }
5.
localName4
является(NS)Data
объектом, а не(NS)Dictionary
. Это ожидаемое поведение (оно есть в документеCBAdvertisementDataServiceDataKey
). Я не понимаю, чего вы хотите (почему JSON?)? Ваш код не имеет смысла.
Ответ №1:
Нет необходимости приводить его к Data
и сериализовывать обратно в Dictionary
. Чтобы получить доступ к значениям из словарей, просто вызовите их по ключу:
let configuration = localName4["Client Characteristic Configuration"]
Если тип объявления localName4
не [AnyHashable : Any]
, измените объявление, если это возможно, или приведите его следующим образом:
if let dict = localName4 as? [AnyHashable : Any] {
let configuration = dict["Client Characteristic Configuration"]
...
}
Комментарии:
1. при печати конфигурации я получаю нулевое значение
2. конфигурация [AnyHashable (конфигурация, характерная для клиента): <41424344 45463132 31323334 35363738 45324441>] получил это значение при печати dict
3. Можете ли вы заменить
AnyHashable
наString
?4. если блок выполнения условия не вызывается
5. Хорошо, теперь вам нужно выяснить, к какому типу относится ключ. Потому что это не строка. Распечатать результат
type(of: localName4)
или даже выполнить итерацию по ключам сArray(localName4.keys).forEach({ print("(type(of: $0))") })