这很清楚且有效:
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?
答案 0 :(得分:1)
根据Martin R的评论,我建议为功能部分“解决”解决方案
func test(inout data: DEMO) {
var a = NSData(bytesNoCopy: &data, length: sizeof(DEMO),freeWhenDone:false)
....
}
inout参数至少提供非成本版本的数据。