Swift – 从ConstUnsafePointer <()>转换

我在testing版3.考虑下面的Objective-C行:

const uint8_t *reportData = [data bytes]; 

data是一个NSData对象。

这条线如何在Swift中重写?

data.bytes的types是ConstUnsafePointer<()> ,虽然有很多关于如何在Swift中创build指针types的文档,但是关于如何使用它们没有太多的信息。

编辑:添加一些上下文,我试图将苹果的HeartRateMonitor示例代码移植到Swift。 此代码与BLE心率监视器进行交互。 我正在处理的这段代码将蓝牙系统收到的数据转换为用于UI的整型数据。 从BT接收的数据预计是一个数组,元素0用于检查标志,元素1包含该值。

这里是上下文中的Objective-C行:

 const uint8_t *reportData = [data bytes]; uint16_t bpm = 0; if ((reportData[0] & 0x01) == 0) { /* uint8 bpm */ bpm = reportData[1]; } 

你在找什么是如何将NSData转换为一个UInt8数组。 就是这样。

 import Foundation let path = "/etc/csh.cshrc" // something existent let data = NSData(contentsOfFile: path) var aofb = [UInt8](count:data.length, repeatedValue:0) data.getBytes(&aofb, length:data.length) for c in aofb { let s = UnicodeScalar(Int(c)).escape(asASCII:true) println("\(c):\(s)") } 

只是build立了下面的代码(下面的注释代码在Beta 3上工作ConstUnsafePointer <()>需要更改为COpaquePointer才能在Beta 2上工作,请参阅编辑历史了解更多信息)

 var dataPath = NSBundle.mainBundle().pathForResource("TestData", ofType: "") // What I have in TestData is "GREETINGS WORLD" var originalData = NSData(contentsOfFile: dataPath) var dataLength = originalData.length println("original data: \(originalData)") // Output original data // Data to bytes var reportBytes: ConstUnsafePointer<()> = originalData.bytes var bytesToString = NSString(bytes: reportBytes, length: dataLength, encoding: NSUTF8StringEncoding) println("string from bytes: \(bytesToString)") // Bytes to data var bytesToData = NSData(bytes: reportBytes, length: dataLength) println("data from bytes: \(bytesToData)") 

控制台日志

 original data: <47524545 54494e47 5320574f 524c44> string from bytes: GREETINGS WORLD data from bytes: <47524545 54494e47 5320574f 524c44> 

也发现这可能有所帮助

 ConstUnsafePointer<T> /// This type stores a pointer to an object of type T. It provides no /// automated memory management, and therefore the user must take care /// to allocate and free memory appropriately. 

希望这个灯光。

现在看看在Swift中处理蓝牙心率监视器,我发现获取NSData字节值为UInt8格式的最简单的方法是:

 let bytes = UnsafePointer<UInt8>(data.bytes) if bytes[0] & 0x01 == 0 { NSLog("BPM \(bytes[1]") }