【发布时间】:2014-09-25 18:39:05
【问题描述】:
在 Swift 中处理原始数据我遇到了一些我不理解的东西。
NSData 有一个构造函数:
init(bytes: UnsafePointer<Void>, length: Int)
第一个 bytes 参数显然属于 UnsafePointer 类型。
但是,如果我将 [Byte] 对象传递给此构造函数,编译器不仅不会抱怨,而且可以正常工作。
但是,如果我尝试将 [Byte] 转换为 UnsafePointer,我会失败。
这是如何工作的?
例如(您可以在 Playgrounds 中尝试):
let buffer: [Byte] = [0x00, 0xff]
let data = NSData(bytes: buffer, length: buffer.count) // no error
data.description
var pointer: UnsafePointer<Void>
// comment this line to avoid compiler error
pointer = buffer // error
我知道我能做到
UnsafePointer<Void>(buffer)
但我的问题是,NSData 构造函数隐含地做了什么,我不必这样做。
【问题讨论】:
标签: casting swift nsdata swift-playground