Search code examples
swiftunsafe-pointers

Using bytes in swift3


float *vertexBuffer = (float *)positionSource.data.bytes;

'bytes' is unavailable: use withUnsafeBytes instead

but I don't know how to use it

_ = positionSource?.data.withUnsafeBytes({ (<#UnsafePointer<ContentType>#>) -> ResultType in

   })

Solution

  • withUnsafeBytes is a generic method, the ContentType is inferred from the type of the closure. With

    data.withUnsafeBytes { (vertexBuffer: UnsafePointer<Float>) in
        // Use  vertexBuffer ...
    }
    

    you'll get a UnsafePointer<Float> pointing to the bytes in the data. Note that this pointer must not be used outside of the closure.

    You can also compute a result and pass it back from the closure to the caller. Example:

    let result = data.withUnsafeBytes { (vertexBuffer: UnsafePointer<Float>) -> Float in
        let result = // ... compute result ...
        return result
    }