-
-
Save kirsteins/6d6e96380db677169831 to your computer and use it in GitHub Desktop.
var initalArray = [1, 2, 3] | |
let pointer: UnsafeMutablePointer<Int> = UnsafeMutablePointer(initalArray) | |
let arrary = Array(UnsafeBufferPointer(start: pointer, count: initalArray.count)) |
In Swift 3, you can also skip the pointer
step (line 2)— let array = Array(UnsafeBufferPointer(start: initialArray, count: initialArray.count))
.
I can't discern why this works (it's not like UnsafeBufferPointer
is a protocol that Array
conforms to), but hey, I'm not complaining.
Shouldn't this be:
let pointer: UnsafeMutablePointer< Int > = UnsafeMutablePointer(&initalArray)
with the '&'
@capnslipp It work because a "Float" or "Int" array is also a ContiguousArray
Some me memory of this array is stored continuously
For more detail please see Apple Documentation
Hi, according to Apple's document:
The pointer created through implicit bridging of an instance or of an array’s elements is only valid during the execution of the called function. Escaping the pointer to use after the execution of the function is undefined behavior. In particular, do not use implicit bridging when calling an UnsafeMutablePointer initializer.
so, using pointer
from
// Swift 3.0 Line 2
let pointer: UnsafeMutablePointer = UnsafeMutablePointer(mutating: initalArray)
is undefined.
// Swift 3.0 Line 2
let pointer: UnsafeMutablePointer = UnsafeMutablePointer(mutating: initalArray)