gpt4 book ai didi

Swift NSMutableData 附加字节

转载 作者:搜寻专家 更新时间:2023-10-31 22:03:46 27 4
gpt4 key购买 nike

我正在尝试快速将一个字节附加到 NSMutable 数据变量,我正在寻找一种更简单的方法。相关的 Objective-C 代码是:

NSMutableData *data = [[NSMutableData alloc] init];
uint8_t number = 255;
[data appendBytes:&number length:2];

我还没有发现我可以在 Swift 中做类似的事情。起作用的是首先创建一个字节值数组,然后将其传入。例如:

    var data = NSMutableData()
let value: Byte = 0xFF
let byte: [Byte] = [value]
data.appendBytes(byte, length: 1)

//this works too and is a little simpler
data.appendBytes([value] as [Byte], length: 1)

是否有更简单的方法或者我遗漏了什么?该文档指定它需要一个 UnsafePointer 并且可以使用 Word(Int 的类型别名)创建 UnsafePointer,因此以下工作

    var word: Word = 255
data.appendBytes(UnsafePointer(bitPattern: word), length: 4)

但这并不是我真正想要的——我想要一个 Byte (UInt8)。有什么建议吗?

最佳答案

根据 Using Swift with Cocoa and Objective-C ,当一个函数被声明为接受一个 UnsafePointer 参数时,它可以接受以下任何一个:

  • nil,作为空指针传递

  • 一个 UnsafePointer、UnsafeMutablePointer 或 AutoreleasingUnsafeMutablePointer 值,必要时转换为 UnsafePointer

  • 一个 in-out 表达式,其操作数是一个 Type 类型的左值,它作为左值的地址传递

  • 一个 [Type] 值,作为指向数组开头的指针传递,并在调用期间延长生命周期

第三个项目符号表示您可以:

var value: Byte = 0xFF    // must be var, let will not work
data.appendBytes(&value, length: 1)

注意:这里必须使用var而不是let,因为它必须是左值。

如果你发现自己经常添加一个字节,你可以扩展 NSMutableData:

extension NSMutableData {
func appendByte(var b: Byte) {
self.appendBytes(&b, length: 1)
}
}

var data = NSMutableData()
data.appendByte(255)

编辑(Swift 3):

extension NSMutableData {
func appendByte(_ i: Int8) {
var i = i
self.append(&i, length: 1)
}
}

var data = NSMutableData()
data.appendByte(255)

关于Swift NSMutableData 附加字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25734357/

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