结构化为NSData

时间:2014-06-29 16:38:56

标签: swift nsdata

这很清楚且有效:

struct DEMO {
   var used: Bool = false;
}

var a = DEMO()
var dataA = NSData(bytesNoCopy: &a, length: sizeof(DEMO))

这很有意义,因为此方法使用CMutableVoidPointer。

现在使用const:

let b = DEMO(used:true)
var dataC = NSData(bytes: &b, length: sizeof(DEMO)) // ERROR
var dataB = NSData(bytesNoCopy: &b, length: sizeof(DEMO))  // ERROR

你在两个init方法上都会出错,但为什么呢?

我是否真的必须首先将const复制到var中才能使用它?

var c = b
var dataC = NSData(bytes: &c, length: sizeof(DEMO))

我认为这就是为什么它在一个函数中是一个类似的问题,你得到一个"让":

func test(data: DEMO) {
  var c = NSData(bytes: data, length: sizeof(DEMO)) // ERROR
  var b = NSData(bytes: &data, length: sizeof(DEMO)) // ERROR
  var d = NSData(bytesNoCopy: data, length: sizeof(DEMO)) // ERROR
  var a = NSData(bytesNoCopy: &data, length: sizeof(DEMO)) // ERROR
}

所有这些都会导致错误。

如何使用NSData处理swift const?

1 个答案:

答案 0 :(得分:1)

根据Martin R的评论,我建议为功能部分“解决”解决方案

func test(inout data: DEMO) {
  var a = NSData(bytesNoCopy: &data, length: sizeof(DEMO),freeWhenDone:false)

  .... 
}

inout参数至少提供非成本版本的数据。