You should be able to type your `dataBuffer ` as [Int8] (Byte array). Then you won’t need `withUnsafeMutableBytes`. You can simply call it like this:
self.request = c_library_call(¶ms, dataBuffer) // Call as if it is a C array It works because of C interoperability compiler magic. As long as the instance holding `dataBuffer` is not deallocated and you have not resized the array, the pointer should remain valid. > On Apr 27, 2017, at 4:38 PM, Rick Mann via swift-users > <swift-users@swift.org> wrote: > > >> On Apr 27, 2017, at 01:48 , Alex Blewitt <alb...@apple.com> wrote: >> > ... > >> The let constant may not even be stored in a single place; if it's known to >> be constant it can be in-lined at the point of use and potentially unpacked >> and dead code elimination throw away the unused members, for example. >> >> If you want to pass in a let constant into the pointer, you can create a >> copy of it locally in a local variable and then use that instead. However >> this will be in the local scope, so the pointer isn't valid after it returns. > > Ah, so this brings up another issue, then. Many of the calls in the C library > take a pointer to some memory and hang on to it, filling it in at a later > point (they make network requests). I've been doing it like this, and it's > been working, but I wonder if this is fragile: > > class > MyClass > { > func > execute() > { > self.dataBuffer = Data(count: kLGSImageDataSize) > precondition(self.dataBuffer != nil, "Unable to allocate image buffer > (\(kLGSImageDataSize) bytes)") > > var params = c_library_params_t() > params.data_capacity = self.dataBuffer!.count > > self.dataBuffer?.withUnsafeMutableBytes > { (inBuffer) -> Void in > // This call returns immediately, but assumes > // it can write to inBuffer later… > > self.request = c_library_call(¶ms, inBuffer) > } > > if self.request == nil > { > // Error > } > } > > var dataBuffer: Data? > } > > > -- > Rick Mann > rm...@latencyzero.com > > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users