如何使用UnsafeMutableBufferPointer

joe*_*els 5 swift

CI会做这样的事情

int count = 10;
int *buffer;
num = malloc(count * sizeof(int));
for (int i = 0; i < count; i++) {
    buffer[i] = rand();
}
Run Code Online (Sandbox Code Playgroud)

我见过像这样使用的UnsafeMutablePointer

let buffer = UnsafeMutablePointer<Int>.alloc(count)
for i in 0..<count {
    buffer[i] = Int(arc4random())
}
Run Code Online (Sandbox Code Playgroud)

如何在Swift中为C风格缓冲区使用UnsafeMutableBufferPointer?另外,我如何为指针重新分配更多空间?

Mar*_*dpe 8

UnsafeMutableBufferPointer不拥有其内存,因此您仍然必须使用UnsafeMutablePointer分配底层内存.但是,您可以将缓冲区指针用作集合,并使用for-in循环枚举它.

let count = 50
let ptr = UnsafeMutablePointer<Int>.alloc(count)
let buffer = UnsafeMutableBufferPointer(start: ptr, count: count)
for (i, _) in buffer.enumerate() {
    buffer[i] = Int(arc4random())
}

// Do stuff...

ptr.dealloc(count)   // Don't forget to dealloc!
Run Code Online (Sandbox Code Playgroud)

Swift指针不提供realloc功能.您可以使用C函数,或者如果您想这样做,可以使用自己的函数.