使用Swift 5+向OutputStream写入数据

3
这段代码以前是可以的(指编译器没有投诉):
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转换为OutputStream.write最终需要的UnsafePointer<UInt8>
如何以非废弃的方式编写此函数?
1个回答

9

关键是使用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上运行正常,但显然存在一些问题,请参阅相关论坛讨论


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接