Swift NSMutableData附加Byte

Swift NSMutableData附加Byte,第1张

概述我试图在 swift中将一个字节附加到NSMutable数据变量,我正在寻找一种更简单的方法.相关的 Objective-c代码将是: NSMutableData *data = [[NSMutableData alloc] init];uint8_t number = 255;[data appendBytes:&number length:2]; 我没有发现我可以在Swift中做类似的事情 我试图在 swift中将一个字节附加到NSMutable数据变量,我正在寻找一种更简单的方法.相关的 Objective-c代码将是:

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

我没有发现我可以在Swift中做类似的事情.首先创建一个Byte值数组然后传入它的工作原理是什么.例如:

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)

有更简单的方法还是我错过了什么? doc指定它需要一个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
>一个输入输出表达式,其 *** 作数是类型为Type的左值,它作为左值的地址传递
>一个[Type]值,作为指向数组开头的指针传递,并在调用期间延长生命周期

第三个子d意味着你可以做到:

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

注意:你必须在这里使用var而不是因为它必须是左值.

如果您发现自己经常添加单个字节,则可以扩展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附加Byte全部内容,希望文章能够帮你解决Swift NSMutableData附加Byte所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/998920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存