The whole thing looks like this:
var myIntArray = Array<Int>(repeating: 10, count: 10)
func mutableRawPointer(to pointer: UnsafeMutableRawPointer,
_ body: (UnsafeMutableRawPointer) -> Void)
{
print("Acquired raw pointer: \(pointer)")
body(pointer)
print("Raw pointer END\n")
}
func arrayIntPointer(to pointer: UnsafeMutablePointer<Array<Int>>,
_ body: (UnsafeMutablePointer<Array<Int>>) -> Void)
{
print("Accquired Array<Int> typed pointer: \(pointer)")
body(pointer)
print("Array Int pointer END\n")
}
func genericTypedPointer<T>(to pointer: UnsafeMutablePointer<T>,
_ body: (UnsafeMutablePointer<T>) -> Void)
{
print("Accquired generic typed pointer: \(pointer)")
body(pointer)
print("Typed generic pointer END\n")
}
func forcedTypedPointer<FT>(_ _: FT,
to pointer: UnsafeMutablePointer<FT>,
_ body: (UnsafeMutablePointer<FT>) -> Void)
{
print("Acquired forced generic pointer: \(pointer)")
body(pointer)
print("Forced generic pointer END\n")
}
mutableRawPointer(to: &myIntArray){_ in}
arrayIntPointer(to: &myIntArray){_ in}
genericTypedPointer(to: &myIntArray){_ in}
forcedTypedPointer(myIntArray, to: &myIntArray){_ in}