#ios #swift #bluetooth-lowenergy #ibeacon #cadence
#iOS #быстрый #bluetooth -низкое энергопотребление #ibeacon #частота #swift
Вопрос:
-(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
dispatch_async(dispatch_get_main_queue(), ^{
NSData *data = characteristic.value;
uint8_t *array = (uint8_t*) data.bytes;
cadenceValue = [CharacteristicReader readUInt8Value:amp;array];
self.cadence.text = [NSString stringWithFormat:@"%d", cadenceValue];
});
}
Как получить частоту с устройства bLE (Bluetooth с низким энергопотреблением) в swift 2. Я не могу найти точный код для этого. Для этого didUpdateValueForCharacteristic
вызывается метод делегирования.
У меня есть код nRF Toolbox, но он находится на objective c или swift 3, а мой проект находится на swift 2. Я пытался вызвать метод objective c, используя заголовок bridging, но он всегда возвращал частоту 0.
Комментарии:
1. Как выглядит пример кода Swift 3?
2. Получаю ошибку в bindMemory и указателе в swift 2 // в didUpdateValueForCharacteristic пусть data = characteristic.value var array = UnsafeMutablePointer<UInt8>(изменение: (данных! как NSData). bytes.bindMemory (для: UInt8.self, емкость: данные! .count)) self.cadenceValue = NORCharacteristicReader.readUInt8Value(ptr: amp;array) // Метод. статическая функция считывает значение 8(ptr-указатель: без небезопасного изменения<UInt8>) -> UInt8 { пусть значение = aPointer.указываемый указатель = aPointer.successor() возвращает значение } @davidgyoung
3. @davidgyoung столкнулся с проблемой преобразования приведенного выше кода в swift 2, проблема связана с aPointer.pointee и bindMemory
Ответ №1:
Я не уверен в определении CharacteristicReader
, но вы могли бы попробовать:
[CharacteristicReader readUInt8Value:amp;array];
cadenceValue = Int(array[0])
self.cadence.text = [NSString stringWithFormat:@"%d", cadenceValue];
Вышесказанное предполагает, что результат вызова readUInt8Value помещается в массив UInt8
объектов, а значение частоты находится в первом байте массива. Вы также можете проверить, находится ли правильное значение в других байтах, попробовав cadenceValue = Int(array[1])
или cadenceValue = Int(array[2])
и т.д.