我是一名初学者,正在学习Swift开发。我正在开发一个基于BLE的应用程序。 今天我更新了Xcode 8和iOS 10,并将我的代码转换为Swift3。然后,我需要转换一些语法。在解决这个问题之后,我发现了一个关于CBCharacteristic的问题。
问题
在 didUpdateValueforCharacteristic 方法中,我可以获取更新后的CBCharacteristic对象。 如果我打印整个对象,它会正确显示 value = <3a02>。 但是当我从CBCharacteristic中检索值时,characteristic.value只显示2个字节(该值的大小)。
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?)
{
if (characteristic.uuid.description == LED_WAVELENGTH_CHARACTERISTIC_UUID)
{
print("Characteristic - \(characteristic)")
print("Data for characteristic Wavelength - \ (characteristic.value)")
}
}
日志结果:
Characteristic - <CBCharacteristic: 0x1742a50a0, UUID = 2C14, properties = 0xE, value = <3a02>, notifying = NO>
Data for characteristic Wavelength - Optional(2 bytes)
PS:这段代码在之前的版本中完全正常工作。
感谢关注,希望有人能帮助我解决这个问题。
characteristic.value.description()
返回了字符串“2 bytes”。当在Swift中的字符串上下文中评估对象(这是通过值内插在print语句中所做的)时,Swift实际上会调用对象的description
函数并使用结果。在这种情况下,NSData(或在Swift 3中只是Data
)包含2个字节,因此这就是“描述”该对象而不是它的值。3a02 确实是两个字节。它不是一个字节,也不是四个字节。 - Paulw11