【发布时间】:2014-07-11 00:44:49
【问题描述】:
我正在测试 3。请考虑以下 Objective-C 行:
const uint8_t *reportData = [data bytes];
其中data 是NSData 对象。
如何用 Swift 重写这行代码?
data.bytes 是 ConstUnsafePointer<()> 类型,虽然有大量文档介绍如何在 Swift 中创建指针类型,但关于如何使用它们的信息并不多。
编辑: 为了添加一些上下文,我尝试将 Apple 的 HeartRateMonitor 示例代码移植到 Swift。此代码与 BLE 心率监视器交互。我正在处理的这段代码将蓝牙系统接收到的数据转换为 int 以在 UI 中使用。从 BT 接收到的数据应该是一个 uint 数组,元素 0 用于检查标志,元素 1 包含该值。
这是上下文中相同的 Objective-C 行:
const uint8_t *reportData = [data bytes];
uint16_t bpm = 0;
if ((reportData[0] & 0x01) == 0)
{
/* uint8 bpm */
bpm = reportData[1];
}
【问题讨论】:
-
你想用它做什么?你在 Objective-C 中做了什么?你试过做同样的事情吗?我的经验是,一切顺利。例如,单个“字节”应该可以使用下标访问。
-
在原始问题中添加了更多注释
-
你试过直接翻译吗?正如我之前所说,我的经验是,下标将按照您的预期工作。
-
没有发布我经历的每个排列,我会说我尝试了几个版本尝试“直接”翻译,或使用
as转换,或尝试通过一些其他指针对象。一些尝试由于类型原因无法编译,其他尝试会执行但会引发运行时异常。 dankogai 的解决方案看起来很有希望,当我有我的硬件时需要进行测试。