如何将数据从Swift 4数据对象复制到OutputStream对象?

时间:2018-07-10 21:37:59

标签: swift

我正在尝试将数据从Swift 4数据对象复制到OutputStream。大概可以在早期版本上使用的代码是

let len = data.withUnsafeBytes {
    outputStream.write($0, maxLength: bytesRemaining)

XCode 9抱怨

  

无法将类型'UnsafeRawBufferPointer'的值转换为参数类型   'UnsafePointer

在OutputStream只接受部分数据的情况下,我也想不出如何提高这一点。

2 个答案:

答案 0 :(得分:1)

您的data很可能是[UInt8]。解决此问题的最方便的方法是改为用Data值代替。接口非常相似,因此除了声明外,它不必更改太多代码。或者,您可以像这样将字节复制到Data中:

let len = Data(data).withUnsafeBytes {
    outputStream.write($0, maxLength: bytesRemaining)
}

您可以使用[UInt8]直接在UnsafeBufferPointer上工作:

let len = data.withUnsafeBufferPointer {
    if let address = $0.baseAddress {
        outputStream.write(address, maxLength: bytesRemaining)
    }
}

答案 1 :(得分:0)

尝试一下:

let data: NSData = dataToWrite
self.outputStream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)