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
})
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
})
I think you can do it like this.
let str = "hello"
let strData = str.data(using: String.Encoding.utf8)!
strData.withUnsafeBytes { (bytes: UnsafePointer<CChar>) -> Void in
print("\(bytes[1])") //exp: access as c string
}
Hope to help you!
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
}