【发布时间】:2017-01-22 02:08:48
【问题描述】:
我是快速开发的初学者。我正在研究基于 BLE 的应用程序。 今天我更新了 Xcode 8、iOS 10 并将我的代码转换为 swift3。然后我的一些语法需要转换。修复此问题后,我在 CBCharacteristic 上发现了一个问题。
问题
在 didUpdateValueforCharacteristic 里面,我可以得到更新的 CBCharacteristic 对象。 如果我打印出整个对象,它会正确显示。 -> 值 = 当我从 CBCharacteristic 检索值时,characteristic.value -> 2bytes(这个值的大小)
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:这段代码在以前的版本上完全可以正常工作。
感谢关注,希望有人能帮我解决这个问题。
【问题讨论】:
-
问题是什么?您有一个可选值。您已在上一行中强制展开它,但您打印的是可选值,而不是展开的值。
-
我的问题是为什么我得到特征值的结果是 2 个字节。我应该根据 CBCharacteristic Object 得到 。
-
因为是两个字节。数据不包含“3a02”作为字符串,它包含 0x3a(十进制 58) - 一个字节和 0x02(十进制 02)第二个字节。这是 570 作为 little-endian 16 位值,但您需要确认外围设备使用的格式
-
是的,正确的。我也在我的问题中提到。这是价值的大小。在 swift2.2 中,返回结果是“”。现在在 swift 3 中,返回结果是值的大小。
-
如果您在字符串上下文中解释 NSData,那么您将获得
description方法的结果,但这仅用于调试/日志记录。你不应该依赖description的返回值是一致的。如果您需要对数据值进行操作,请使用getBytes根据需要访问字节
标签: ios bluetooth-lowenergy swift3 xcode8 cbperipheral