gpt4 book ai didi

swift - 从 NSInputStream 读取 IntegerType

转载 作者:搜寻专家 更新时间:2023-11-01 07:29:47 26 4
gpt4 key购买 nike

我正在尝试编写一个通用函数,它将从 NSInputStream 中读取一个 int 类型的值:

func read<T : IntegerType>() -> T? {
var buffer : T = 0

let n = withUnsafePointer(&buffer) { (p) in
self.read(UnsafePointer<UInt8>(p), maxLength: sizeof(T))
}

if n > 0 {
assert(n == sizeof(T), "read length must be sizeof(T)")
return buffer
} else {
return nil
}
}

我基于我之前的 Google 搜索结果: https://gist.github.com/ishikawa/c3917ea4daa107f1ce68

一切似乎都很好,除了一件事:

withUnsafePointer(&buffer) 显示错误:

无法将“inout T”类型的值转换为预期的参数类型“inout _”

我不确定,如何解决这个问题 - 或者如果这个方法完全错误并且不起作用......

有人有什么想法吗?

编辑:

所需的功能:

let i: Int8 = stream.read()
let o: UInt32 = stream.read()
// etc.

最佳答案

read()方法需要一个可变缓冲区指针:

let n = withUnsafeMutablePointer(&buffer) { (p) in
self.read(UnsafeMutablePointer(p), maxLength: sizeof(T))
}

占位符类型 <UInt8>UnsafeMutablePointer(p)可以从上下文自动推断。

请注意,您的方法存在一个普遍问题:如果输入流未连接到真实文件,而是连接到某些通信 channel (例如 TCP 套接字、管道等)那么唯一的保证就是 read()等待直到至少一个字节被读取并且断言n == sizeof(T)会失败。你必须在循环中再次阅读,直到所需的数量已阅读。

关于swift - 从 NSInputStream 读取 IntegerType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33356178/

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