使用Swift 5+将数据写入OutputStream

时间:2019-04-24 12:14:53

标签: swift stream outputstream binary-data swift5

这段代码曾经很好(就编译器而言,它并不抱怨):

extension OutputStream {
    func write(_ data: Data) -> Int {
        return data.withUnsafeBytes { pointer in
            return self.write(pointer, maxLength: data.count)
        }
    }
}

从Swift 5.0开始,这会产生警告:

  

警告:不建议使用“ withUnsafeBytes”:改为使用withUnsafeBytes<R>(_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R

我尝试使用建议的方法,但似乎无法将UnsafeRawBufferPointer纠缠到UnsafePointer<UInt8>最终需要的OutputStream.write中。

如何以不推荐的方式编写此函数?

1 个答案:

答案 0 :(得分:1)

技巧是使用bindMemory函数:

func write(_ data: Data) -> Int {
    return data.withUnsafeBytes({ (rawBufferPointer: UnsafeRawBufferPointer) -> Int in
        let bufferPointer = rawBufferPointer.bindMemory(to: UInt8.self)
        return self.write(bufferPointer.baseAddress!, maxLength: data.count)
    })
}

虽然这可以在Swift 5.0上运行,但是显然存在一些问题。参见a related forum discussion