使用Swift 5+将数据写入OutputStream

问题描述 投票:0回答:1

这段代码过去很好(在编译器没有抱怨的意义上):

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

我尝试使用所提出的方法,但我似乎无法将UnsafeRawBufferPointerUnsafePointer<UInt8>最终需要的OutputStream.write争论。

如何以非弃用的方式编写此函数?

swift stream outputstream binary-data swift5
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.