gpt4 book ai didi

swift - 在 Swift 3 中将数据写入 NSOutputStream

转载 作者:IT王子 更新时间:2023-10-29 05:34:43 26 4
gpt4 key购买 nike

this question的解决方案不再适用于 Swift 3。

Data(以前的 NSData)不再有属性 bytes

let data = dataToWrite.first!
self.outputStream.write(&data, maxLength: data.count)

使用这段代码,我得到了错误:

Cannot convert value of type 'Data' to expected argument type 'UInt8'

如何在 Swift 3 中将 Data 写入 NSOutputStream

最佳答案

NSData 有一个 bytes 属性来访问字节。Swift 3 中新的 Data 值类型有一个 withUnsafeBytes()方法,它调用一个带有指向字节的指针的闭包。

这就是将 Data 写入 NSOutputStream 的方式(不转换为 NSData):

let data = ... // a Data value
let bytesWritten = data.withUnsafeBytes { outputStream.write($0, maxLength: data.count) }

备注: withUnsafeBytes() 是一个泛型方法:

/// Access the bytes in the data.
///
/// - warning: The byte pointer argument should not be stored and used outside of the lifetime of the call to the closure.
public func withUnsafeBytes<ResultType, ContentType>(_ body: @noescape (UnsafePointer<ContentType>) throws -> ResultType) rethrows -> ResultType

在上面的调用中,ContentTypeResultType 都是由编译器(如 UInt8Int),使额外UnsafePointer() 不需要转换。

outputStream.write() 返回实际写入的字节数。通常,您应该检查该值。它可以是 -1 如果写操作失败,或者写的时候小于data.count到套接字、管道或其他具有流量控制的对象。

关于swift - 在 Swift 3 中将数据写入 NSOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38090320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com