数组 – Swift数组元素地址
这是一个实际问题,我通过将文件分成1000个字节的中继来发送文件
data = NSData.dataWithContentsOfFile(path) var dataPackage : [Byte](count: 1000,repeatedValue: 0) for offset = 0; offset < data.length; { // omit some range check here data.getBytes(&dataPackage,NSRange(location: offset,length: 1000)) send(dataPackage) } 一切都很棒,直到我想在0位置的dataPackage中插入一个序列号,所以很自然地,我会将上面的内容更改为 data.getBytes(&dataPackage[1],length: 999)) 事实证明,只有1个元素被复制到dataPackage.剩下的999个元素被复制到了不知道的地方 我的问题是,1)如何使这项工作,2)如何解决swift中的数组,以及& data [i] =& data i(如第1个例子所示)但& data [ik]!=& data [i] k 编辑:我做了解决(1) data.getBytes(&dataPackage + 1,length: 999)) 问题(2)仍然存在 解决方法
不要getBytes(& dataPackage [i] k,..),我认为,这可能会导致“访问冲突”
考虑以下代码: struct MyStruct { var _val = [Int](count: 1000,repeatedValue: 0); subscript(idx:Int) -> Int { get { println("get: [(idx)] -> val((_val[idx]))") return _val[idx] } set(val) { println("set: [(idx)] old((_val[idx])) -> new((val))") _val[idx] = val } } } func myFunc(ptr:UnsafeMutablePointer<Int>,val:Int) { println("mutating: ptr((ptr)) <- (val)") ptr.memory = val } MyStruct只是Array的一个包装器. myFunc接收一个可变指针并改变它的值. 有了这个,当你这样做: var foo = MyStruct() myFunc(&foo[1],12) 输出: get: [1] -> val(0) mutating: ptr(0x00007fff561619d8) <- 12 set: [1] old(0) -> new(12) 看到? >将值复制到某个地方 不过,我不知道某个地方在哪里. 当你喜欢的时候: var foo = MyStruct() myFunc(&foo[1] + 1,12) 输出: get: [1] -> val(0) set: [1] old(0) -> new(0) mutating: ptr(0x00007fff5c0b79e0) <- 12 这一次,我的猜测是: >将值复制到某个地方 另一方面,当你这样做时: var foo = [Int](count:1000,repeatedValue:0) myFunc(&foo + 1,12) 这意味着: >让ptr作为foo第一个元素的指针 结果,foo [1]将成功完成12. 实际上,在the document.中提到的数组的输入(&)是非常特殊的
只有内置阵列具有最后一个功能. 因此,当您将& notAnArrayLvalue(包括& array [i])传递给UnsafeMutablePointer< Type>时参数,长度应该始终为1,你不应该或 – 它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |